SQL(結構化查詢語言)

SQL

SQL分類

SQL分類 操作對象 操作 關鍵字
DDL(數據定義語言) 數據庫,表,視圖和索引 創建,刪除,修改 CREATE,DROP,ALTER
DCL(數據控制語言) 數據庫 數據庫的事務管理 grant
DML(數據操縱語言) 數據內容 增刪改 INSERT INTO,DELETE,UPDATE
DQL(數據查詢語言) 數據內容 查詢 SELECT

DDL(數據定義)

數據定義,數據庫的創建修改刪除

DCL(數據控制)

事務管理

授權:

DML(數據操縱)

數據操縱語言,對數據進行增刪改

DQL(數據查詢)

​ SQL註釋和注意事項

1.簡單查詢

1)基本的查詢語句

where條件查詢

select name from student where id=1;

(查詢id等於1的學生的名字)


組合where子句

操作符 and

select name from student where id>2 and id<6 and age=18;

(and操作符將條件組合在一起,每增加一個過濾條件就要添加一個and)


操作符or

select * from student where age>8 or name like “zhang%”;

(查詢年齡大於8歲或者名字是zhang開頭的 所有人的 學生)


計算次序 當or與and一起出現的時候 and優先級更高

select * from student where age>8 or age<18 and name like “zhang%”;

(查詢年齡小於18而且名字是zhang開頭的 學生 或者年齡只需要大於8歲的學生)

不過最好用括號()來明確計算次序,括號括起來的先計算


in操作符

select *from student where id in(1,4,2,7);

(in表示指定了條件範圍)

過濾查詢 關鍵字distinct(不能有重複的)

SELECT DISTINCT name FROM student; (查詢stundent表中所有不重複的名字)

limit限制查詢
select *from student order by id  desc limit 1,2;
(根據id倒序排序,從下標爲1開始查,查2條數據)
查詢多個字段

SELECT id,name from student ; (從student表中查詢所有的id和name列,用逗號作爲字段之間的分隔符)

別名 as

select id as sid from student;

(查詢出來的視圖中id字段名變爲sid,只是修改視圖中的而不會修改原來表中的id名)

連接 concat(" 分隔符",字段1,字段2)

select concat(‘=’id,name) from student;

結果比如就是:2018214491=張三

2)模糊查詢

like操作符與%通配符

%通配符(匹配任何字符任意長度,但null不能匹配)

select name from student where name like “張%”;

(查詢“張”開頭的所有student表中的名字; “%”是一個通配符,表示任何字符他都匹配)

應用場景:棧內搜索(效率比較低)


通配符 _

_只能匹配任意單個字符,不能多個字符


正則匹配

關鍵字regexp

select * from student where name regexp " [z,c]c" ;

regexp表示後面接的是一個正則表達式;

3)排序以及聚合函數

排序關鍵字order by

select *from student order bt age; 默認是升序

select *from student order bt age desc; 降序

聚合函數

count() 計算數量

sum() 計算和 select sum(age) from student;求student表格中的年齡之和

avg() 求平均 select avg(age)from student; 求年齡的平均

分組 group by

select count(*)as total ,sex from student group by sex;

(按照sex分組,查出男女各自的數量)

group by having

select count(*),sex from student group by sex having sex=“女”;

按照sex分組查詢sex=“女”的數量;

4)字符串模糊查詢

2.複雜查詢

1)內連接

內連接查詢列出與連接條件匹配的數據行,它使用比較運算符來比較被連接的值。


等值連接
select * from stu as s,mark as m where s.id=m.id;

或者
select * from stu as s,mark as m  inner join on s.id=m.id;

(查詢mark表的id 與stu表的id相等的所有的列值)   inner join 連接了兩個表

ON條件:是過濾兩個鏈接表笛卡爾積形成的 中間表的 約束條件。
意思是上方查詢的是兩個表的所有列,形成了一個笛卡爾積,以此基礎上的約束條件是s.id=m.id

where條件:1在沒有on條件的單表查詢中, 是限制物理表或者 中間記錄查詢結果的約束
			2.在有on的時候是兩表形成的中間表的查詢條件

on只進行連接操作,where只過濾物理表/中間表的記錄
having 用在分組中  group by having

不等值連接

運算符有: !=,<,<=, >,>=,<>(不等於), between

select *from stu as s,mark as m where s.id=m.id and m.mark>50;

(在上方等值連接的基礎上,在加一個查詢條件mark>50分)


自然連接:在連接條件中使用等於(=)運算符比較被連接列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連接表中的重複列


說明:select *from mark,stu ; 返回的是兩個表的笛卡爾積

若 mark表內有4條記錄, stu有3條記錄,那麼返回就是3×4=12條記錄


2)外連接查詢

左連接left join

以左邊表爲準,左邊有有幾條記錄,返回就幾條。

select * from stu as s left join mark as m on s.id=m.id;

假設stu表3條記錄,mark表2條記錄,以stu爲準的話,返回3條記錄,但是mark不夠,就以null填充

右連接right join

以右邊的表爲準

全連接

沒有以左表爲準還是以右表爲準。

3)聯合查詢union all

select *from student union all select *from course;
(把兩個表分別查到的數據放到一起,聯合查詢)

4)子查詢

1)視圖(概念,如何使用,作用,注意事項)

2)子查詢,標量子查詢,關聯子查詢

3)各種常用函數

4.多表查詢

1)表的加法

2)聯結查詢,交叉連接,內連接,外連接(左連接,右連接),全連接

3)聯結應用案列

4)case表達式

sql常見面試題:

發佈了85 篇原創文章 · 獲贊 45 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章