【知了堂学习笔记】MySQL数据库常用的SQL语句整理
一,常用、簡單的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
轉載于:https://www.cnblogs.com/paopaolong/p/7499961.html
總結
以上是生活随笔為你收集整理的【知了堂学习笔记】MySQL数据库常用的SQL语句整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日本酒店寄送行李至机场的攻略
- 下一篇: 使用OutputDebugString帮