Linux-MySQL基本命令-SQL語句


 

服務端命令SQL

在數據庫系統中,SQL語句不區分大小寫(建議用大寫)
SQL語句可單行或多行書寫,以“;”結尾
關鍵詞不能跨多行或簡寫
用空格和縮進來提高語句的可讀性
子句通常位於獨立行,便於編輯,提高可讀性
注釋:
SQL標准:
/*注釋內容*/ 多行注釋
-- 注釋內容 單行注釋,注意有空格
MySQL注釋:
#

SQL優化

查詢時,能不要*就不用*,盡量寫全字段名
大部分情況連接效率遠大於子查詢
多表連接時,盡量小表驅動大表,即小表 join 大表
在千萬級分頁時使用limit
對於經常使用的查詢,可以開啟緩存
多使用explain和profile分析查詢語句
查看慢查詢日志,找出執行時間長的sql語句優化

 

sql查詢:單表查詢和多表查詢

 

兩張表合並:橫向合並、縱向合並

縱向合並:兩張表挑出相同的字段進行合並(注意順序)

 

范例

SQL查詢范例

1、給表的字段名添加別名 select stuid as 學生編號,name 姓名,gender 性別 from students;

2、查詢年齡大於40的 select * from students where age >40;

3、查找年齡大於20小於40的 select * from students where age < 40 and age > 20; select * from students where age between 20 and 40;(這種是包含)

4、查詢以姓名以X開頭的 select * from students where name like 'x%';

5、查找字段中為空值得信息 select * from students where classid is null;

6、查找字段值不為空得信息 select * from students where classid is not null;

7、查找報1,2,6班得學生信息 select * from students where classid in (1,2,6);

8、查找年齡,並去掉重復得年齡 select distinct age from students;

9、查詢年齡,去掉重復並排序 select distinct age from students order by age;(默認正序) select distinct age from students order by age desc;(倒敘)

10、統計students表總共有多少行 select count(*) from students;

11、統計age年齡的總和 select sum(age) from students;

12、統計年齡最大的 select max(age) from students;

13、統計男女平均年齡 select gender,avg(age) from students group by gender;

14、分別統計每班的女生男生平均成績(gender性別classid班級age成績) select gender,classid,avg(age) from students group by gender, classid;

15、基於上條再統計女生的最大年齡 select gender,max(age) from students group by gender having gender='f'; 備注:分完組后再條件用having不能用where

16、按照課程統計沒課考試最好的成績 select courseid,max(score) as 最好成績 from scores group by courseid;

17、取排序的前3名 select age from students order by age desc limit 3;

18、基於排序跳過2個顯示3個 select age from students order by age desc limit 2,3;

多表

1、縱向合並兩張表
select stuid as id,name,age,gender from students union select tid,name,age,gender from teachers;
2、基於上條查詢 查找age字段大於50的信息
select * from (select stuid as id,name,age,gender from students union select tid,name,age,gender from teachers)as b  where b.age >50;
備注:利用了子查詢

子查詢:

查找比平均年齡大的信息
select name,age from students where age >(select avg(age) from students);

交叉鏈接

兩張表交叉鏈接組合
select * from students cross join teachers;

內連接

取兩張表的交集實現查找出學生對應的老師
select s.name as 學生name,t.name as 老師name from students as s inner join teachers as t on s.teacherid=t.tid;
備注:因為兩種表有相同的字段,為了群分開給它加別名as,

左外鏈接

兩張表A 和 B ,
取A表和B表的與A表相關的部分,A加B的一部分
select stuid,s.name,s.age,s.gender,classid,teacherid,tid,t.name,t.age,t.gender from students as s left join teachers as t on s.teacherid=t.tid;

 

有這樣一個表emp

公司人員信息,即對應的領導--(leaderid領導編號)

id name leaderid
1 xiaoming null
2 wanger 1
3 zhangsan 2
4 lisi 3

現在有這樣一個需求,查詢每個人員對應的領導是誰

把emp表當作兩張表來處理,自鏈接

 select e.name as emp,l.name as leader from emp as e left outer join emp as l on e.leaderid=1.id;

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM