【知了堂学习笔记】MySQL数据库常用的SQL语句整理
一,常用、簡(jiǎn)單的SQL操作語(yǔ)句
1.數(shù)據(jù)庫(kù)操作:
1)創(chuàng)建數(shù)據(jù)庫(kù):?create database database_name;?創(chuàng)建并設(shè)置字符編碼?create database database_name character set utf8;?
2)刪除數(shù)據(jù)庫(kù):?drop datebase database_name;?
3)查看數(shù)據(jù)庫(kù)字符集編碼:?show variables like 'character_set_database' ?? ?如果使用可視化工具要切換到所查數(shù)據(jù)庫(kù),或者使用:?use database_name;?命令使用所查數(shù)據(jù)庫(kù)
4)修改數(shù)據(jù)庫(kù)字符編碼:? alter database_name character set utf8;?
2.數(shù)據(jù)表的操作:
1)創(chuàng)建表:?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(默認(rèn)約束)、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 約束類型 約束名稱? 注意:刪除主鍵時(shí),應(yīng)先刪除引用了它的外鍵
? 比如:?alter table student drop foreign key fk_1?
三.常用的查詢語(yǔ)句
?
1.簡(jiǎn)單的查詢:
1)無(wú)條件查詢:?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:從小到大排序? ,默認(rèn)是asc
比如:?select s_id,s_name,s_score from student where s_score>=60 order by s_id asc?譯:查詢出及格的學(xué)生,并按學(xué)生的id從小到大排序
4)模糊查詢:查詢關(guān)鍵字 like 主要使用 %?、?_?、[ ]?三個(gè)字符 ,%?表示匹配0個(gè)或多個(gè)字符(通配符),? _? 匹配一個(gè)字符,[ ]??匹配其中中的一個(gè)(類似正則表達(dá)式)
例:?select * from student where s_name like '張%'?譯:查詢學(xué)生中姓張的,兩個(gè)字,三個(gè)字的都可以查出來(lái),如:張三、張麻子
例:?select * from student where s_name like '張_'?譯:查詢學(xué)生中姓張的,且只有兩個(gè)字的,如:張三、張四
例:?select * from student where s_name like '[張李王]三'?譯:查詢學(xué)生中姓名為:張三、李三、王三 的信息
5)分組查詢:?select * from table_name group by 列名? 關(guān)鍵字 group by ,將統(tǒng)計(jì)的列中相同數(shù)據(jù)進(jìn)行分組
? 比如:?select s_score,count(*) '人數(shù)' from student group by s_score?譯:查詢學(xué)生中每個(gè)分?jǐn)?shù)有多少人,就是對(duì)相同的成績(jī)進(jìn)行了分組
分組查詢常用函數(shù):
(1)max:求最大值? ? ?例:?select s_name,max(math_score) from student group by s_name? 查詢數(shù)學(xué)成績(jī)最高的學(xué)生姓名
(2)min:求最小值? ? ? 例:?select s_name,min(math_score) from student group by s_name?查詢數(shù)學(xué)成績(jī)最低的學(xué)生姓名
(3)avg:求平均值? ? ? 例:?select class_id,avg(math_score) from student group by class_id??查詢每個(gè)班的平均數(shù)學(xué)成績(jī)
(4)sum:求總數(shù)和 例:?select sum(s_id) from student ? 查詢表中一共有多少學(xué)生
(5)count:求總行數(shù)
6)having用法:篩選成組后的各種數(shù)據(jù),它可以篩選真實(shí)表中沒有的數(shù)據(jù)作為查詢條件
? ? ? 比如:?select s_name,sum(s_score) from student group by s_name having sum(s_score)>600? 查詢總成績(jī)大于600分的學(xué)生,但我們表沒有總分這個(gè)記錄
只有每科的成績(jī),這時(shí)就可以用having了,where就不能來(lái)篩選總成績(jī)大于600的學(xué)生了。
having和where的區(qū)別:
having:having對(duì)查詢結(jié)果中的列發(fā)揮作用,篩選數(shù)據(jù)
wherer:where針對(duì)表中的列發(fā)揮作用,查詢數(shù)據(jù)
7)limit用法:limit 主要是用于分頁(yè),limit n,m 表示從n+1開始取m條數(shù)據(jù)
比如:?select * from student limit 2,5? 表示去所有信息的 第3條后面的5條記錄:3、4、5、6、7
8)簡(jiǎn)單的多表查詢:?select table1.*,table2.* from table1,table2 where 條件?
2.子查詢和連接查詢
1)where子查詢: 把內(nèi)層查詢結(jié)果當(dāng)作外層查詢的比較條件
比如:?select s_name,s_score from student where s_score in (select s_score from student where s_score>=60)?查詢成績(jī)及格的學(xué)生,后面括號(hào)里可以放子查詢,也可以放已知的數(shù)據(jù)。
2)from子查詢:把子查詢的結(jié)果作為一個(gè)表,進(jìn)行再次查詢
比如: 查詢成績(jī)及格學(xué)生的姓名個(gè)班級(jí),這里將子查詢作為一個(gè)新表(stu) 再進(jìn)行查詢? ,這里有班級(jí)表(calss)和學(xué)生表(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子查詢:把子查詢結(jié)果拿到內(nèi)層,看內(nèi)層的查詢是否成立
比如:查詢班級(jí)中的學(xué)生姓名,
?select class_id,s_name from student where exists(select * from class where class.class_id=student.class_id)?
4)連接查詢
連接查詢我們把表的數(shù)據(jù)給出來(lái),方便對(duì)照查看
??
left join 左連接:以左表為準(zhǔn),去右表找數(shù)據(jù),如果沒有匹配的數(shù)據(jù),則以null補(bǔ)空位
語(yǔ)法:?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 ??
? 結(jié)果:? 查詢班級(jí)里的學(xué)生,沒有學(xué)生的就用 null 補(bǔ)位了
right join 右連接:以右表為準(zhǔn),去左表找數(shù)據(jù),如果沒有匹配的數(shù)據(jù),則以null補(bǔ)空位? 和左連接相反
? 語(yǔ)法:?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 ?
結(jié)果: ? 把表的位置換了一下,我們可以看出結(jié)果是一樣的,左連接和右連接只是連接的方向不同
inner join 內(nèi)連接:查詢的結(jié)果是所連接2個(gè)表的交集,
? 語(yǔ)法:?select ta1.*,ta2.* from ta1 inner join ta2 on 條件?
例:?SELECT class.*,s_id,s_name FROM student INNER JOIN class ? 我們這里不跟條件,查詢的就是兩個(gè)表的所有交集
? ?
例:?SELECT class.*,s_id,s_name FROM student INNER JOIN class ON class.class_id=student.class_id ? ?有條件后,都滿足條件的才會(huì)查詢出來(lái)
?
?
? 歡迎大家來(lái)到知了堂社區(qū)一起學(xué)習(xí)成長(zhǎng)——傳送門:http://www.zhiliaotang.com
轉(zhuǎn)載于:https://www.cnblogs.com/paopaolong/p/7499961.html
總結(jié)
以上是生活随笔為你收集整理的【知了堂学习笔记】MySQL数据库常用的SQL语句整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 日本酒店寄送行李至机场的攻略
- 下一篇: charset参数 sqluldr2_S