Create database ‘database_name’;數據庫
show database_name;spa
show create database db_name;blog
drop database db_name;索引
Alter database db_name new options;io
For exampletable
aleter database db1 default charset GBK;class
create table student(效率
name varchar(20),date
gender enum(‘male’, ‘female’, ’secret’),select
age tinyint,
height float
);
show tables;
關鍵字: like
%:能夠表明任意字符
_:下劃線,能夠表明任意的當個字符
show tables like ‘class_%’;(全部以class開頭的表面)
select * from student where name like ‘周%’;(全部以周開頭的名字)
select * from student where name like ‘%國%’;(全部包含國自的名字)
select * from student where name like ‘%%軍’;(全部軍字結尾的名字)
drop table table_name;
Drop table if exists table_name;(若是表存在則刪除)
更名關鍵字:rename
增長:add
刪除:drop
重命名:change
修改:modify
關鍵字alter
alter table 表名 子命令語句
alter table table_name rename to new_table_name;
新方法
rename table table_name to new_table_name;
alter table table_name add 新字段名 字段類型
alter table student add score tinyint;
alter table table name drop field_name
alter table table_name modify field_name 新的字段類型
alter table student modify name varchar(50);
alter table student change gender sex enum(‘male’, ‘female’) after score;
alter table 表名 新的表選項
alter table mg_teacher default charset utf8;
Insert into 表名(字段列表) values(值列表) #當插入所有值的時候字段列表能夠省略
一次插入多條數據
insert into student(field1, field2, field3) values
(value1, value2, value3),
(value1, value2, value3),
(value1, value2, value3);
delete from 表名[刪除條件]
delete from student where score<=90;
update table_name set 字段1=新值1,字段2=值2…[修改條件];
Update student set age. = age + 1;
先來看一條select語句:
select * from student where score >= 97.5;
此時,若是數據庫從第1條記錄開始遍歷查詢,直到一個一個的找到分數爲97.5分的學生,效率很顯然很低下!可是,此時若是在score字段上加上一個索引,此時就能夠極大的加快數據表的查詢速度!
索引分類:
語法爲:
key(字段名1,字段名2……)或index(字段名1,字段名2……)
其實就是惟一鍵
unique key(字段名1,字段名2……)
其實就是主鍵
primary key(字段名1,字段名2……)
例子
create table suoyin(
a int,
b int,
c int,
key(a), — 普通索引
unique key(b), —惟一索引
primary key(c) — 主鍵索引
);
缺點?
union
select 語句1
union[union選項]
select 語句2
所謂的聯合查詢就是將多個查詢結果縱向上拼接,全部查詢語句的字段數量應該是一致,好比,不能一個3列,一個5列!
用於相同的兩個表相同的字段進行拼接查詢
cross join
交叉鏈接是最容易理解的,就是從一張表的每一條記錄去鏈接另一張表的每一條記錄,而且全部的記錄都會被保存下來,就是對兩張表作笛卡爾積!
假如表A有m條記錄,表B有n條記錄,它們作笛卡爾積(交叉鏈接)的結果一共就有m*n條記錄!
Select * from A cross join B;
inner join
內鏈接的含義就是:
數據在左表存在,同時在右表又有相對應的匹配的結果纔會被保存,若是沒有匹配上,咱們就認爲該條記錄沒有意義,就不會被保存![若是有一方的字段的值是空的時候會忽略]
上面叫匹配?就是存在某種關係可以使得兩張表彼此識別本身,體如今語法上,每每就是兩張表中具備相同的某個字段值!
select * from 左表 [inner] join 右表 on 左表名.字段 = 右表名.字段名
left join
跟內鏈接同樣,一樣是拿左表的每個記錄按照on後面的條件去匹配右表的每一條記錄,若是匹配成功,就保存兩個表的全部的記錄,若是匹配失敗(這裏的匹配失敗是指左表的某條記錄跟右表的全部記錄進行匹配的時候,沒有一條是成功的!),此時,依然保留左表的這條記錄,右表的記錄所有爲NULL,此時左表也叫作主表!
right outer join,其中這裏的outer能夠省略!因此,右外鏈接也一般簡稱右鏈接
跟內鏈接同樣,一樣是拿左表的每個記錄按照on後面的條件去匹配右表的每一條記錄,若是匹配成功,就保存兩個表的全部的記錄,若是匹配失敗(這裏的匹配失敗是指左表的某條記錄跟右表的全部記錄進行匹配的時候,沒有一條是成功的!),此時,依然保留右表的這條記錄,左表的記錄所有爲NULL,此時右表也叫作主表!
select * from student where score = (select max(score) from student);
select * from student where home in (select name from home_in_sky);
select * from student where (age, score) = (select max(age), max(score) from student);
exists子查詢主要是用來判斷,返回一個布爾值:true或false!
若是exists後面的查詢語句有結果集返回(查詢到了記錄),返回真,不然就返回假!
因此,exists子查詢的目的不是爲了獲得結果集,而是爲了判斷後面的查詢語句是否查詢到了記錄!
select exists(select * from user where name= ‘abc’ and password = ‘123456’)