一,經常使用、簡單的SQL操做語句
1.數據庫操做:正則表達式
1)建立數據庫: create database database_name; 建立並設置字符編碼 create database database_name character set utf8; sql
2)刪除數據庫: drop datebase database_name; 數據庫
3)查看數據庫字符集編碼: show variables like 'character_set_database' 若是使用可視化工具要切換到所查數據庫,或者使用: use database_name; 命令使用所查數據庫
函數
4)修改數據庫字符編碼: alter database_name character set utf8; 工具
2.數據表的操做:編碼
1)建立表: create table table_name(field1 int primary key,field2 varchar(20) not null ...) spa
2)刪除表: drop table table_name 3d
3)插入表: insert into table_name(field1,field2) values(value1,value2) code
4)查詢表: select * from table_name where 查詢條件 blog
5)添加列: alter table table_name add col_name varchar(20) not null
6)刪除列: alter table table_name drop column col_name
7)修改列: alter table table_name modify column col_name varchar(50)
8)更新列: update table_name set col1=value1... where 條件...
3.約束
1)種類:primary key(主鍵約束)、default(默認約束)、not null(非空約束)、unique(惟一約束)、foreign key(外鍵約束)、check(檢查約束)
2)添加約束: alter table table_name add constraint 約束名 約束類型
好比: alter table student add constraint fk_1 foreign key(class_id) references class(class_id);
3)刪除約束: alter table table_name drop 約束類型 約束名稱 注意:刪除主鍵時,應先刪除引用了它的外鍵
好比: alter table student drop foreign key fk_1
三.經常使用的查詢語句
1.簡單的查詢:
1)無條件查詢: select * from table_name;||select col1,col2,... from table_name;
2)條件查詢: select * from table_name where 條件;
3)排序查詢: select col1,col2,...from table_name where 條件 .. order by 列名 desc/asc desc:從大到小排序。asc:從小到大排序 ,默認是asc
好比: select s_id,s_name,s_score from student where s_score>=60 order by s_id asc 譯:查詢出及格的學生,並按學生的id從小到大排序
4)模糊查詢:查詢關鍵字 like 主要使用 % 、 _ 、[ ] 三個字符 ,% 表示匹配0個或多個字符(通配符), _ 匹配一個字符,[ ] 匹配其中中的一個(相似正則表達式)
例: select * from student where s_name like '張%' 譯:查詢學生中姓張的,兩個字,三個字的均可以查出來,如:張3、張麻子
例: select * from student where s_name like '張_' 譯:查詢學生中姓張的,且只有兩個字的,如:張3、張四
例: select * from student where s_name like '[張李王]三' 譯:查詢學生中姓名爲:張3、李3、王三 的信息
5)分組查詢: select * from table_name group by 列名 關鍵字 group by ,將統計的列中相同數據進行分組
好比: select s_score,count(*) '人數' from student group by s_score 譯:查詢學生中每一個分數有多少人,就是對相同的成績進行了分組
分組查詢經常使用函數:
(1)max:求最大值 例: select s_name,max(math_score) from student group by s_name 查詢數學成績最高的學生姓名
(2)min:求最小值 例: select s_name,min(math_score) from student group by s_name 查詢數學成績最低的學生姓名
(3)avg:求平均值 例: select class_id,avg(math_score) from student group by class_id 查詢每一個班的平均數學成績
(4)sum:求總數和 例: select sum(s_id) from student 查詢表中一共有多少學生
(5)count:求總行數
6)having用法:篩選成組後的各類數據,它能夠篩選真實表中沒有的數據做爲查詢條件
好比: select s_name,sum(s_score) from student group by s_name having sum(s_score)>600 查詢總成績大於600分的學生,但咱們表沒有總分這個記錄
只有每科的成績,這時就能夠用having了,where就不能來篩選總成績大於600的學生了。
having和where的區別:
having:having對查詢結果中的列發揮做用,篩選數據
wherer:where針對表中的列發揮做用,查詢數據
7)limit用法:limit 主要是用於分頁,limit n,m 表示從n+1開始取m條數據
好比: select * from student limit 2,5 表示去全部信息的 第3條後面的5條記錄:三、四、五、六、7
8)簡單的多表查詢: select table1.*,table2.* from table1,table2 where 條件
2.子查詢和鏈接查詢
1)where子查詢: 把內層查詢結果看成外層查詢的比較條件
好比: select s_name,s_score from student where s_score in (select s_score from student where s_score>=60) 查詢成績及格的學生,後面括號裏能夠放子查詢,也能夠放已知的數據。
2)from子查詢:把子查詢的結果做爲一個表,進行再次查詢
好比: 查詢成績及格學生的姓名個班級,這裏將子查詢做爲一個新表(stu) 再進行查詢 ,這裏有班級表(calss)和學生表(student)
select s_name,class_name from class,(select s_name,class_id from student where s_score>=60) as stu where class.class_id = stu.class_id
3)exists子查詢:把子查詢結果拿到內層,看內層的查詢是否成立
好比:查詢班級中的學生姓名,
select class_id,s_name from student where exists(select * from class where class.class_id=student.class_id)
4)鏈接查詢
鏈接查詢咱們把表的數據給出來,方便對照查看
left join 左鏈接:以左表爲準,去右表找數據,若是沒有匹配的數據,則以null補空位
語法: select col1,col2,col3 from ta left join tb on 條件 on後面放鏈接的一些條件,跟where後面跟條件同樣
例: SELECT class.*,s_id,s_name FROM class LEFT JOIN student ON class.class_id=student.class_id
結果: 查詢班級裏的學生,沒有學生的就用 null 補位了
right join 右鏈接:以右表爲準,去左表找數據,若是沒有匹配的數據,則以null補空位 和左鏈接相反
語法: select col1,col2,col3 from ta right join tb on 條件
例: SELECT class.*,s_id,s_name FROM student RIGHT JOIN class ON class.class_id=student.class_id
結果: 把表的位置換了一下,咱們能夠看出結果是同樣的,左鏈接和右鏈接只是鏈接的方向不一樣
inner join 內鏈接:查詢的結果是所鏈接2個表的交集,
語法: select ta1.*,ta2.* from ta1 inner join ta2 on 條件
例: SELECT class.*,s_id,s_name FROM student INNER JOIN class 咱們這裏不跟條件,查詢的就是兩個表的全部交集
例: SELECT class.*,s_id,s_name FROM student INNER JOIN class ON class.class_id=student.class_id 有條件後,都知足條件的纔會查詢出來