sql中“delete from 表名”表示_SQL查询语句知识点总结
- 為什么要學習SQL?
SQL知識點總結1
- 數據庫基礎知識
什么是數據庫?什么是是sql?
數據庫database:用于存放數據的容器(一個文件或者一組文件)。區別于數據庫管理軟件(DBMS-database management system)。
SQL:數據庫查詢語言,Structured Query Language的簡稱。SQL語言是用于操縱數據庫軟件的語言。
(為什么要使用數據庫?數據庫比excel有更多的優點:數據庫可以存放比excel更多的數據,允許很多人同時使用數據。excel好比是移動硬盤,數據庫好比是網盤很多人可以同時訪問里面的數據。)
- 關系數據庫的原理
關系數據庫:多張表+各表之間的關系
需要掌握:多張表里每一張表的結構是什么樣?各表之間的關系是什么樣的?
表的結構:表名;列;行
列名:知道這一列記錄的是什么數據。每一行記錄的是數據。每一行表示記錄學生的信息。
列名學號是用來唯一標識一個學生的。為什么要用學號標識數據的唯一性?姓名無法唯一標識,可能有重名。
主鍵:表中用來表示數據唯一性的列,叫主鍵。是關系數據庫的重要概念。
生活中,我們用主鍵來確定數據的唯一性,典型的例子:身份證證號。
各表之間的關系:關系數據庫是由多張表組成的。
聯結join:學生表和成績表之間通過學號關聯起來。關系就是數據能夠對應的匹配。在關系數據庫中,這種數據集的關系叫做“聯結join”。(核心概念,在多表查詢中經常用到。)
關系數據庫管理系統:
關系數據庫原理:設計草圖;
實現數據庫原理的建筑人員:數據庫管理系統,用來管理數據庫的計算機軟件。mysql,oracle,sql service.
操作數據庫的工具:sql,為了操作數據庫而開發的語言。對數據庫里的表進行操作,修改查找等。(sql是操作數據庫的一種工具。)
把數據庫比作一碗米飯,里面放的米就是數據,現在我們要吃碗里的米飯,怎么取出米飯,我們用筷子操作取出米飯。
- 如何安裝mysql數據庫軟件?
mysql數據庫(存放數據)客戶端navicat(用來操作數據庫的軟件)只要安裝了客戶端,都可以連接到數據庫。
安裝文檔
如何用客戶端navicat連接到mysql數據庫?
步驟:點擊連接;填寫數據庫連接信息;連接測試;確定。
安裝好客戶端后,在左上角有一個“鏈接”的按鈕,點擊彈出"連接屬性“的客戶端。
localhost,說明數據庫在自己的電腦上。端口:默認端口。
- 表的創建,刪除和更新?
創建數據庫:
鼠標左鍵da;新建數據庫;設置數據庫信息(數據庫名:school;字符集:utf8(可以同時支持英文和中文。如果這里創建不對,后面會出現亂碼的情況);排序規則)
school是灰色的,說明沒用打開數據庫。右鍵:打開數據庫;school圖標變亮,說明打開。
表的創建:
選中數據庫,表放在哪個數據庫下。選中表;右鍵:新建表;輸入列名(學號),類型(varchar),長度(255),不是null(?)。
點擊”添加欄位“,可以給表增加新的列,增加新的列;
添加”主鍵(黃色的 標記)
保存:輸入表名(student),點擊“確定”。
保存后的student的表,在school下找到,然后雙擊表名,打開表。
數據類型:
數據庫的數據類型:3種。數據大小:字節。字節是計算機存儲單位。表示數據大小。
字符串:類型:char;varchar;text;tinytext;mediumtext;longtext;blob;tinyblob;mediumblob;longblob。
數字:類型: int/integer;tinyint;smallint;mediumint;bigint;float;double;decimal。
日期:類型:date;datetime;timestamp;time;year。
例子:student表:長度(默認值:255)。設定了數值類型后,不能存放和所設置數值類型不一致的數據。
約束:是除了數據類型以外,對表中數據條件進行約束的一種功能。(根據業務需求設置:null:對應列中的數據可以包含空置。not null:對應列中的數據不可以包含空值(必須填)。primary key:主鍵(表示那一列的數值不能添加重復值。聯合主鍵:多個列組合起來作為主鍵。)
表的更新:
選中表名student;設計表;添加欄位;刪除欄位。
選中表名,刪除表。
注意:刪除表后很難恢復。
- 數據的插入,刪除和更新?
數據的插入:
選中表student;打開表;通過“增加行”,“刪除行”添加和刪除數據。然后保存。
也可以使用sql語句批量插入數據。
sql插入數據語句:
insert into <表名>(<列名1>,<列名2>,......)values(<值1>,<值2>,......);
藍色的字是sql的關鍵字。
列名不能加單引號,值加單引號表示一個字符串。
在客戶端navicat里哪里寫sql呢?查詢-新建查詢-查詢編輯器。在界面空白的地方寫sql語句。這個界面叫查詢編輯器,不是只能寫查詢語句,可以寫任何的sql語句。
第一步寫sql語句,第二步點擊運行,第三步看運行結果。
結果信息:err報錯。duplicate entry .....for key primary.(插入的值中有和現有數據重復的值,觸發主鍵的約束條件(學號設置為主鍵。)解決辦法:打開表,將重復值刪除,然后運行結果。
空值(null);空字符串(' ')SQL的基本語法:
DDL(數據定義語言):操作對象:數據庫和表。create;drop;alter
DML(數據操縱語言):操作對象:表的數據。insert;delete;select;update
DCL(數據控制語言):用來取消或者控制數據的變更。對關系數據庫的用戶是否有權限操縱數據進行設置。commit;rollback;crant
SQL書寫規則:
1.SQL語句逐條執行,以英文分號;結尾。
2.SQL語句不區分關鍵字的大小寫。(關鍵字是數據庫設定好的有特別意義的單詞,在客戶端寫的SQL語句,關鍵字是藍色標注的,比如insert into values,大小寫都可以。表名和列名也不區分大小寫;但是插入表中的值是區分大小寫的,比如A和a。
3.輸入符號的時候只能使用英文的。
寫sql語句遇到錯誤,第一步先查有沒有把符號寫成中文的。列名不能加單引號。
- 基本的查詢語句
select語句:
selec<列名1>,<列名2>,......from<表名>;
select子句:希望從表中查出列的名稱(查詢結果的列名);from子句:從哪個表查詢。
整個查詢語句的含義是:從表中查詢出需要列名的數據。
查詢結果中列的順序和查詢語句中select后的順序是一樣的。
查詢多個列的時候,需要用英文逗號分開。
如果想查找出所有的列,用*表示。select * from student
運行原理:通過sql語句向數據庫查詢數據,通過客戶端navicat展示查詢內容。
為列設置別名as:
select 姓名 as s_name, 性別as '人類性別' from student
使用別名的目的:使語句查詢結果更容易理解。英文轉化為中文。
刪除重復數據distinct:
在select語句中使用distinct
select distinct 姓名from student;
select distinct 學號,姓名 from student;將多個列的數據進行組合,這幾個列的數據都相同的時候才算做重復數據。
distinct只能放在第一個查詢的列名之前。SQL書寫規則:
sql語句逐條執行,運行完一條sql語句,再運行下一條語句。一條sql語句以;結尾。
SQL語句不缺分關鍵字的大小寫。
列名不能加單引號,列名命名的時候不能有空格。(姓名?;姓 名×)
符號只能使用英文符號。
- 指定查詢條件
where子句:限定條件的查詢語句
查出姓名為“猴子”的學生的學號:select 姓名,學號 from student where 姓名='猴子';
where 姓名='猴子'指定條件。(注意子句中的中文值用英文單引號。但是列名不能用單引號。
SQL運行順序:
1.運行from子句,從哪個表里查詢;2.運行where子句,查詢的條件是什么?查詢列名為什么條件的行;3.運行select子句,從where子句查詢的行中取出select語句指定的列。
書寫順序和運行順序不一樣。
- 注釋和sql語句注意事項
注釋方法:單行注釋;多行注釋。
(團隊協作中方便其他人和歷史記錄方便查看。)
單行注釋:
- - 查詢出全部列
select * from student;
多行注釋:
/*
查詢姓名是猴子學生的學號
*/
select 姓名,學號
from student
where 姓名='猴子';
sql語句注意事項:符號的使用,英文符號。
- 運算符
算數運算符;比較運算符;邏輯運算符
算數運算符:+-*/;含義:加法運算;減法運算;乘法運算;除法運算。
5+Null=Null Null是空值,所有含有空值的計算,結果還是空值。
()內的表達式優先進行。(1+2)*3
例子:select 學號,成績,成績/100 as '成績百分比' from score;
比較運算符:
=相等;<>不等于;>大于; >=大于等于; <小于;<=小于等于
select 姓名,學號 from student where 姓名= '猴子';
select 學號,成績 from score where 成績<60;
select 姓名,出生日期 from student where 出生日期< '1990-01-01';
字符串比較規則:
字符串的順序是按照字典順序。
10是以1開頭的數字,因此10比2小。
'10' < '2'
如何查詢出null空值的行?
is null/is not null
查詢出教師姓名是空值的行?查詢出教師姓名不是空值的行?
select 教師號,教師姓名 from teacher where 教師姓名 is null;
select 教師號,教師姓名 from teacher where 教師姓名 is not null;
邏輯運算符:可以將多個查詢條件組合起來
not否定某一條件;
and并且;
between范圍查找;
or或者;
in:or的簡單寫法。
案例:
not:
select 學號,成績 from score where not 成績 >= 60;和select 學號,成績 from score where 成績 < 60;一般不適用not語句。
and: 并且
業務場景:同時使用多個查詢條件來查詢所需要的數據。
文氏圖。
select 學號,成績 from score where 成績>=60 and 成績<=90;
select 姓名,性別 from student where 姓名= '男' and (姓名='猴子' or 姓名=‘馬云');
()內先運行。
between:范圍查詢
select 學號,成績 from score where 成績 between 60 and 90;
select 學號,成績 from score where 成績 >=60 and 成績 <=90;
or:或者。文氏圖
兩個條件中滿足任何一個。
select 學號,成績 from score where 成績 < 60 or 成績 > 90;
in:或者
是or的簡便寫法。
select 姓名,性別 from student where 姓名 in ('猴子','馬云');
select 姓名,性別 from student where 姓名 not in ('猴子','馬云');
- 字符串模糊查詢
like:字符串模糊查詢。
%表示任意字符串。
猴%:
--查詢姓“猴”的學生名單
/*
查詢姓“猴”的學生名單
*/
select *
from student
where 姓名 like '猴%';
%猴:
--查詢姓名中最后一個字是“猴”的學生名單
/*
查詢姓名中最后一個字是“猴”的學生名單
*/
select *
from student
where 姓名 like '%猴';
%猴%:
--查詢姓名中帶“猴”字的學生名單
/*
查詢姓名中帶“猴”字的學生名單
*/
select *
from student
where 姓名 like '%猴%';
_1個下劃線表示任意一個字符。
/*
查詢姓”王“的學生名單,并且姓名是3個字的
*/
select *
from student
where 姓名 like '王__'
SQL運行順序:
select子句最后運行,其他子句按書寫順序運行。
select查詢結果
from從哪張表中查詢數據
where查詢條件(運算符,字符串模糊查詢);
- 匯總分析
匯總函數:5個函數
count求某列的行數:count(*)包含空值??梢詫θ魏螖祿愋瓦M行計算。
sum對某列數據求和:只能對數值類型的列計算
avg求某列數據的平均值:只能對數值類型的列計算
max求某列數據的最大值
min求某列數據的最小值
函數:
三個功能:1.功能;2.輸入(參數);3.輸出(返回值)。
如何將函數寫在SQL語句中:
count:
select count(教師姓名) from teacher;
count行數如果計算的是列名,會除去空值null計算。
select count(*) from teacher;
如果count行數計算的是空值,會計算所有的行數,包括空值的部分。
sum:
select sum(成績) from score;
select max(成績), min(成績) from score;
select count (distinct 姓名) from student;如果不想計算重復值,在count前面加上distinct。
在列名前面加上distinct,去除重復值計算。
- 對數據分組
SQL分組:group by
在SQL中,用group by子句按某個條件進行分組。
經常和匯總函數進行使用,數據分析通用模板方法。分析方法:數據分組;應用函數;組合結果。
select 性別,count(*)
from student
where 出生日期 > '1990-01-01'
group by 性別;SQL運行順序:
1.from student; 通過from子句指定從哪張表中查找數據;
2.where 出生日期 > '1990-01-01';運行where子句,通過這個子句查詢出符合條件的行;3.group by 性別;對第二步查出的數據進行分組;
4.select 性別,count(*);對分組后的每個組運用函數,并組合結果。并篩選出select中指定的列。
如何識別問題要分組:每次/每個/每門?
- 對分組結果指定條件
having: 為分組結果指定條件;
where子句只能指定行的條件;having子句可以指定分組以后的條件,比如在分出男生組和女生組的數據后,只需要男生組的數據。
select 性別,count(*)
from student
group by 性別
having count(*)>1;
SQL運行順序:
select 查詢結果 5
from 從哪張表中查找數據 1
where查詢條件 2
group by分組 3
having對分組結果指定條件; 4
- 如何用 SQL 解決業務問題?
業務問題解決套路
1.翻譯成大白話;2.寫出分析思路;3.寫出對應的SQL子句。
如何計算各科的平均成績?
如何計算每門課程的平均成績?
select 課程號, avg(成績)
from score
group by 課程號;
如何計算每門課程的平均成績,并且平均成績大于等于80分?
如何計算每門課程(分組)的平均成績(匯總),并且平均成績大于等于80分(條件)?
select 課程號, avg(成績)
from score
group by 課程號
having avg(成績) >= 80;
- 如何對查詢結果排序?
對查詢結果排序:order by
升序/降序/指定多個排序列名/空值如何排序
降序(desc):從大到小;單詞descend的縮寫。
升序(asc):從小到大;單詞ascend的縮寫。
如何計算每門課程的平均成績,并且平均成績大于等于80分?
select 課程號, avg(成績) as 平均成績
from score
group by 課程號
having avg(成績) >= 80
order by 平均成績 desc;
運行順序:order by是查詢結果排序,因為查詢結果是在select子句后得到的,所以order by是在select子句后運行的。
select 課程號, avg(成績) as 平均成績 4
from score 1
group by 課程號 2
having avg(成績) >= 80 3
order by 平均成績 desc; 5
指定多個排序列名:
select * 2
from score 1
order by 成績 asc, 課程號 desc; 3
先按照成績升序排列,相同成績的按照課程號降序排列。
空值null的排序:
如果數值中有空值,則空值null排列在前面。
null, ' ', 數值1 ,數值2從查詢結果中取出指定行:limit
--從查詢結果中取出前2行數據
selct *
from score
limit 2;SQL運行順序:
select 查詢結果 5
from 從哪張表中查找數據 1
where查詢條件 2
group by分組 3
having對分組結果指定條件 4
order by對查詢結果排序 6
limit 從查詢結果中取出指定行;7
- 如何看懂 SQL 報錯信息?
幾種常見的 SQL 錯誤:
運行報錯:Err
1. 在having/group by中不能使用了select里別名。having子句是先運行的,select子句是后運行的。having運行時沒有”平均成績“這個別名。
2. 在where子句中不能使用聚合函數(匯總函數)。
3. 字符串類型的數字。常見問題:數據存放的類型如果是字符串,如果進行排序和計算,按照字符串類型計算。字符串和數值類型的計算規則是不一樣的。需要改成所需要的數據類型。
練習:sqlzoo中習題練習。
- 視圖
表中存放的是實際數據;
視圖中存放的是SQL查詢語句;
使用視圖時,會運行視圖里的sql查詢語句創建出一張臨時表。
臨時表:當客戶端與數據庫斷開時,這個表會自動刪除。視圖不存放數據,存放的是SQL語句。
create view .......as select 查詢語句;
注意事項:不能往視圖里插入數據。不建議頻繁在視圖里創建視圖。
- 子查詢
SQL語句中有有子查詢,先運行子查詢。
......in子查詢
......any/some 子查詢
......all子查詢
- 標量子查詢
需要單一值的時候。(返回單一的值。)可以和比較運算符/in/any/some/all一起使用。
編程-彈鋼琴
- 關聯子查詢
關聯條件:where。在每個組里比較(關聯子查詢)關聯條件。
where s1.課程號=s2.課程號
- 如何用SQL解決業務問題?
翻譯成大白話;寫出分析思路;寫出對應的sql子句。
如何看懂sql報錯信息?一 一排除錯誤。
- 各種函數
匯總函數:count;sum;avg;max;min;
算術函數:round;abs;mod;
字符串函數:length;lower;upper;contact;replace;substring;
日期函數:current_date;current_time;year;mont;day'dayname;
- 表的加法
加法:union
(將兩個表中重復數據刪除,加起來)
union all
(不刪除重復值將表的內容加起來)
- 表的聯結
聯結:表之間的關系。
常見聯結類型/方式:交叉聯結cross join;內聯結inner join;左聯結eft join;右聯結right join;全聯結full join。
on是表示通過什么產生關系。
交叉聯結(笛卡爾積):將兩個表的每一行合并。
inner join:同時存在的數據。
left join:
right join:
full join:
聯結在from子句。聯結的表。
- case表達式
判斷條件。
case when...then...when....then....else....end;
else可以省略,表示空值。最好寫。
case表達式+聚合函數可同時使用
SQL知識點總結2:
側重點SQL查詢語句的書寫邏輯和運行順序mysql:增刪改查
SQL增刪改查:
對數據庫有修改的操作:增刪改
對數據庫沒有修改的操作:查(數據分析中最主要的sql語句)寫sql順序:
select....from....where...group by....having....order by....limit...;執行順序:
select....輸出 4
from....獲取數據 1
where...過濾 2
group by....分組 3
having....過濾 5
order by....排序 6
limit...;限定個數 7數據流:
列:事物屬性
行:同一個事物的內容
以表呈現的數據/二維數據
數據組織:表的形式
from student 把student這個表的所有數據都獲取過來
select.....from....當這個表準備好以后要展示的內容有哪些?
select * from student
select name from student
select可以對數據進行過濾。
where:在from中獲取的數據進行過濾,符合條件的數據留下,不符合條件的數據丟棄。(and, or.....)SQL必知必會
select name from student where name = '小剛' ;
select * from student where name = '小剛';
group by:分組。分組后如果遇到select,那么輸出的代表是這一組的第一行數據。group by還可以和聚合函數放在一起。
select * from ....where...group by....;
select * from student group by classid;??分組后的第一行數據。不是很理解
把classid相同的分組。
selct count( id, classid ) from student group by classid;
selct count( id, classid ) from student group by classid, name;classid, name兩個相同才算是一組。多列 的分組。
select count( 1 ), classid from student;
select count( name ) , classid from student;
區別:如果Name 中有null值,那么count 1 不記錄null值。其他情況二者一致。
select count (distinct name) , classid form student;
distinct:排除重復值;
聚合函數:count計數;sum求和;max最大值;min最小值;avg平均數;group-concat字符集;
區分:count(1);count(name);count(distinct name)
sql語句和mysql的關系:
sql語句:一種語言;mysql是一個軟件,數據處理軟件。用sql語言操作數據庫mysql。
開源數據庫中最流行的是mysql;oracle/sql server也是試用于sql。
區別:同一個表在不同的數據庫查詢的內容不一致。有細微的區別。
創建數據庫:(schema)
CREATE DATABASE student;
習慣(寫sql的時候如果是sql的關鍵字大寫,其他小寫)
CREATE TABLE student (id int primary key, name char(10), classid int) defaut charset=utf8mb4;
插入數據庫的SQL
INSERT INTO student(id,name, classid) VALUES (1, '假博學',1);
INSERT INTO student(id,name, classid) VALUES (2, '假博',2),(3, '假學',1),(4, '假仁',2),(5, '博學',20;
清空數據表:
TRUNCATE student;
TRUNCATE TABLE student;
where是對行的操作,一行一行的對比/排錯是否滿足條件。
SELECT * FROM student GROUP BY classid;
為什么class id在輸出的時候還進行了排序?
GROUP BY分組,為什么結構還實現了排序,因為進行分組的時候,默地先進行了排序(升序asc)
如果是降序(desc),語句:
SELECT * FROM student GROUP BY classid DESC;
區別:
SELECT COUNT(*), clasid FROM student GROUP BY classid DESC;
SELECT COUNT(1), clasid FROM student GROUP BY classid DESC;
SELECT COUNT(name), clasid FROM student GROUP BY classid DESC;
SELECT COUNT(distinct 1), clasid FROM student GROUP BY classid DESC;
SELECT SUM(id), clasid FROM student GROUP BY classid DESC;
SELECT AVG(id), clasid FROM student GROUP BY classid DESC;
SELECT * FROM student WHERE 1=1 GROUP BY classid;
SELECT * FROM student GROUP BY classid;
where 1=1
where 1=0
1=1永遠都是正確;1=0永遠都是錯誤。
HAVING 過濾的是GROUP BY之后的內容。根據SQL語句執行順序,HAVING 過濾的是GROUP BY后的數據。
查詢每個班中人數大于2個的班級號。
每個:分組,GROUP BY,以班級分組class,人數大于2人數count(1)>2
SELECT classid FROM student GROUP BY classid HAVING COUNT (1)>2;
GROUP BY之后能勇select里別名的內容,之前不可以。
ORDER BY 用那一列進行排序
ORDER BY n;
ODER BY classid,n;
LIMIT:取前幾的行
LIMIT 1;取第一行
LIMIT 1,2;從1 開始取2個
CASE WHEN:
CASE WHEN 放在SELECT里,輸出的時候,把輸出信息置換。
CASE WHEN 表達式
THEN 輸出
WHEN 表達式
THEN輸出
ELSE輸出
END
CASE WHEN id=1
THEN 2
WHEN id=2
THEN 1
ELSE
10
END
對比python:
if id==1;
2
elif id==2;
1
else
0
if id=表達式;
輸出
elif id=表達式;
輸出
else
輸出
將1班的學生轉到2班
將2班的學生轉到1班
3班的學生不變
SELECT id,name FROM student
CASE WHEN 放在SELECT里,輸出的時候,把輸出信息置換。
(CASE WHEN classid=1 THEN
2
CASE WHEN classid=2 THEN
1
ELSE classid END) AS cld
SELECT id,mame, (CASE WHEN classid = 20 THEN 6 WHEN classid = 6 THEN 20 ELSE END) AS cld FROM student;
聚合函數+CASE WHEN:
SELECT name,
MAX(CASE WHEN stage = ' 基’ THEN score ELSE null END) AS '基',
MAX(CASE WHEN stage = ' 爬’ THEN score ELSE null END) AS '爬',
MAX(CASE WHEN stage = ' SQL’ THEN score ELSE null END) AS 'SQL',
FROM score GROUP BY name;
JOIN連接:兩個表相關的查詢
連接:對兩個表的數據進行重組,將數據組合在一個表里。
SELECT studentid,classid,
FROM后的內容:FROM student JOIN class
WHERE classid=2 AND studentid%=1;(ID是奇數:studentid%=1;ID是偶數:studentid%=0)
GROUP BY studentname;
ON條件:過濾條件
SELECT studentid,classid,FROM student JOIN class ON classid=class.id WHERE classid=2 AND studentid%=1 GROUP BY studentname;
SELECT studentid,classid,
FROM student JOIN class ON classid=class.id (JOIN是FROM后的內容,新生成的表)
WHERE classid=2 AND studentid%=1(ID是奇數:studentid%=1;ID是偶數:studentid%=0)
GROUP BY studentname;
FROM 表 JOIN表ON條件
標黃的當作一個新表
ON可以改成WHERE嗎?單純寫JOIN是,ON可以和WHERE替換。但是LEFTJOIN這則不行。
LEFTJOIN和JOIN區別:
LEFTJOIN 必須有ON條件;
回去檢查左邊的數據是否都包含在新生成的表中。如果是,與JOIN沒有區別;如果不是,用NULL與不包含的行組成新行加入新表。
RIGHTJOIN:
A RIGHTJON B=B LEFTJOIN A
多表連接:ABC三個表連接, A和B表先結合成AB表,AB表在和C表結合。
A JOIN B ON....
JOIN C ON...
JOIN D ON...
A JOIN B JOIN C JOIN D
A LEFT JOIN B ON...LEFTJOIN C...
什么情況下用JOIN,什么時候用LEFTJOIN。
查詢通信A的班主任名稱:
SELECT 班主任名字 FROM student JOIN class ON classid=class.id WHERE studentname='A';
查詢哪些同學目前是沒有班級的?
SELECT studentname FROM student LEFTJOIN class ON classid=class.id WHERE class.id IS NULL;
兩個值做比較只能是同一行的數據。
需要兩行之間的對比,自己JOIN自己。
SELECT e1.name FROM employee AS e1 JOIN employee AS e_m2,id WHERE e1.salary>e_m2.salary;
PRIMARY是MYSQL的關鍵字,加反引號/雙引號。反引號在TAB鍵上。
分組,聚合函數不分家,分組一般都是用來做聚合函數。
子查詢:相當直觀的SQL語句。
類似英語里的從句。
WHERE里面的子查詢:
在查詢如果在WHERE/SELECT相當于子查詢先計算結果再判斷。
SELECT id FROM class WHERE manager='小藍';
SELECT name FROM student WHERE classid=1;
子查詢語句:
SELECT name FROM student WHERE classid=(SELECT id FROM class WHERE manager='小藍');
SELECT里面的子查詢:
=的子查詢只能返回一個數值;但是in的子查詢能返回一列數據。
SELECT * , (SELECT id FROM class WHERE manager =’ LV‘ )FROM student
HAVING子查詢不常見;
FROM里面的子查詢:
在FROM里的子查詢必須有別名(as)。FROM里的自查詢相當于一個新的表。
SELECT studentname FROM student JOIN class ON studentclassid=classid WHERE manager=’小藍';
自查詢語句:
SELECT studentname FROM student JOIN (SELECT * FROM class WHERE manager=’小藍') AS c ON studentclassid=classid;
任何子查詢都可以用JOIN的表變換。
半連接:semi-join
子查詢內引用復查詢的表信息/在子查詢中有訪問復查詢表信息的叫做半連接。
半連接作用:找到每個classid中最大的ID做對應的信息。
SELECT * FROM student s1 WHERE id=SELECT MAX(id) FROM student s2 WHERE classid=s1.class id;
半連接前置:
找到每個班級學生的最大學號對應的學生信息。
SELECT * FROM student WHERE id IN (SELECT MAX(id) FROM student GROUP BY classid);
SQL書寫思路:按數據的流程一點點寫。SQL學習資料推薦專業書籍:MySQL必知必會/SQL必知必會
知乎課程:猴子數據分析
從零學會SQL:入門
從零學會SQL:簡單查詢
從零學會SQL:匯總分析
從零學會SQL:多表查詢
從零學會SQL:復雜查詢我的另一個知乎問答:
高中生想學一門技術類似編程什么的,有什么推薦? - Rachel的回答 - 知乎
總結
以上是生活随笔為你收集整理的sql中“delete from 表名”表示_SQL查询语句知识点总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 快速读文件_java快速读取文
- 下一篇: 二阶振荡环节的谐振频率_自动控制系统时域