一,常用、簡單的SQL操作語句
1.數據庫操作:
1)創建數據庫: create database database_name; 創建並設置字符編碼 create database database_name character set utf8;
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 ...)
2)刪除表: drop table table_name
3)插入表: insert into table_name(field1,field2) values(value1,value2)
4)查詢表: select * from table_name where 查詢條件
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 '張%' 譯:查詢學生中姓張的,兩個字,三個字的都可以查出來,如:張三、張麻子
例: select * from student where s_name like '張_' 譯:查詢學生中姓張的,且只有兩個字的,如:張三、張四
例: select * from student where s_name like '[張李王]三' 譯:查詢學生中姓名為:張三、李三、王三 的信息
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條記錄:3、4、5、6、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 有條件后,都滿足條件的才會查詢出來

歡迎大家來到知了堂社區一起學習成長——傳送門:http://www.zhiliaotang.com
