mysql常用的查詢語句


最近在學習node做后台,數據庫用的是Mysql,於是中斷一下看一下mysql語句,方便后面使用

查詢表中全部信息:

select * from 表名

查詢表中指定列的信息:

select 列1,列2 from 表名

數據去重:

select distinct 列... from 表名

拼接結果:

select concat(列1,列2) from 表名

運算符優先級:

1.乘法和除法優先級高於加法和減法

2.同級運算的順序是從左到右

3.表達式中使用“括號”可強行改變優先級的運算順序

select 列1[+-*/]列2 from 表名

設置別名(注意:關鍵字as可以省略)

select 列 as 別名 from 表名
select 列 別名 from 表名

條件查詢:

select 列... from 表名 where 條件

條件中比較運算符:(等於:=  大於:>  大於等於:>=  小於:<  小於等於:<=  不等於:!= 或 <>)

where 列  比較運算符  值

注意:字符串、日期需使用單引號括起來

邏輯運算符(並且:and或&&   或:or   非:not或!)

where 條件1 邏輯運算符 條件2
where not 條件

范圍查詢:

where 列 between 條件1  and 條件2;          //列在這個區間的值
where 列 not between 條件1 and 條件2;    //不在這個區間
where !( 列 between 條件1 and 條件2 );     //同樣表示不在這個區間

集合查詢(判斷列的值是否在指定的集合中):

where 列 in(值1,值2);          //列中的數據是in后的值里面的
where 列 not in(值1,值2);   //不是in中指定值的數據

null值查詢(注意:列中值為null不能使用=去查詢):

where 列 is null;  //查詢列中值為null的數據

模糊查詢:

%:標識0到多個字符,示例:

where 列 like '%0';   //表示以0結尾
where 列 like  '0%';   //表示以0開頭
where 列 like  '%0%';   //表示數據中包含0

_:標識一個字符,可多次使用,示例:

where 列 like '%0_';   //數據結尾第二位是0

結果排序(對查詢出的結果按照一列或多列進行升序還是降序排列  升序:asc  降序:desc  注意:不能使用中文的別名排序)

where 條件 order by 列 [asc/desc]

分頁查詢(beginIndex:標識從第幾條數據開始   pageSize:標識每頁顯示的數據條數)

where [條件] limit beginIndex,pageSize;
ex:每頁顯示3條數據
第一頁: SELECT * FROM 表名 LIMIT 0,3    --0,1,2
第二頁: SELECT * FROM 表名 LIMIT 3,3    --3,4,5
第三頁: SELECT * FROM 表名 LIMIT 6,3    --6,7,8
第四頁: SELECT * FROM 表名 LIMIT 9,3    --9,10,11 
  ……
第七頁: SELECT * FROM 表名 LIMIT 18,3   --18,19,20

beginIndex公式:(當前頁數-1)*pageSize

聚集函數(作用於一組數據,並對一組數據返回一個值)

COUNT:統計結果記錄數,若統計的是列,列中為Null,那么count將不會計算值
MAX:  統計計算最大值
MIN:  統計計算最小值
SUM:  統計計算求和
AVG:  統計計算平均值

分組函數(注意:如果要對分組后的數據進行篩選,那么必須使用having關鍵字,條件寫在having后)

select 聚集函數 from 表名 where [條件] group by 列 having 分組后的條件

Where和having的區別:
Where: 先過濾已有的數據(數據是已經存在的),在進行分組,在聚集計算
Having:先分組,在對每組進行計算,根據得到結果在過濾(分組把數據算出之后,在過濾)
注意:使用having的時候,它是可以使用別名的

多表查詢:

交叉連接:又名笛卡爾積,使用交叉連接會產生笛卡爾積
假設集合A={a, b},集合B={0, 1, 2},則兩個集合的笛卡爾積為{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

select *  from 表1,表2

內連接:過濾為空的數據(查詢的實際上是兩張表數據的交集部分)    目的 ==》解決笛卡爾積現象,正確查詢了需要的數據

select * from 表1,表2  where 表1.字段=表2.字段;  //隱式內連接,使用where條件消除笛卡爾積
select * from 表1 [inner] join 表2 on 表1.字段=表2.字段;  //顯式內連接,如果是多張表,則一直在join..on后依次添加join..on即可,inner關鍵字可被省略

外連接:左外連接、右外連接、全外連接
左外連接:以左邊表為主,返回左邊表中所有數據,若右表中無數據,則顯示為NULL,請參考實際查詢結果來理解

select * from 表1 left [outer] join 表2 on 表1.字段=表2.字段;   //表1為左表,表2為右表,outer關鍵字可被省略

右外連接:以右邊表為主,返回右表中所有數據,若左表中無數據,則顯示為NULL,結合實際查詢結果來理解

select * from 表1 right [outer] join 表2 on 表1.字段=表2.字段;  //表1為左表,表2為右表,outer關鍵字可被省略

全外連接:返回涉及的多表中的所有數據,MYSQL中不支持該查詢,僅限了解自連接:單表當作多表查詢,直白的講就是一張表中數據含有多種關系,使用多表查詢的語法,來查詢一張表,查詢過程中一定要使用別名
多用在分類數據、省市縣分類數據、權限…

select 表1.字段1,表2.字段2 from 表名 as 表1,表名 as 表2 where 表1.字段1=表2.字段2

子查詢:將一個查詢結果作為另一個查詢的對象,直白的講就是SQL語句嵌套

select * from (select * from 表名) as 別名
select * from where 條件->條件中包含查詢語句
注意:1.查詢結果的虛擬表必須取別名
     2.字段與關鍵字一樣,沖突時,需要給字段名加``,(Esc鍵下面、1的左邊)
     3.如果給虛擬結果表中的字段取了別名,則對虛擬結果表查詢時,應該用 表別名.虛擬表字段別名

插入數據:

insert into 表名(字段1,字段2..) values(值1,值2…);
注意: 1.如果插入的表中的主鍵是自增類型的,可以不用插入值
      2.如果主鍵是非自增 ,插入的數據則是填補主鍵字段值空余的值
      3.如果主鍵設置了自動遞增,會從主鍵字段最大值開始插入數據

其他插入方式:

insert into 表名(字段1,字段2) values(值1,值2),(值1,值2);     //插入多條數據【MYSQL】
insert into 表名 values(值1,值2);                    //針對全表所有字段進行插入操作
insert into 表名(字段) select 字段 from 表2;         //查詢結果插入
insert into 表名 select 字段 from 表2;               //查詢結果,全表插入

修改數據:

update 表 set 字段=值 where 條件;  //帶條件修改指定數據,否則修改全表

刪除數據:

delete from 表 where 條件;  //刪除數據帶條件指定數據,否則刪除全表數據

數據備份:

在命令行窗口進行,若操作系統版本高,則使用管理員模式
導出:

mysqldump -u賬戶 -p密碼 數據庫名稱>腳本文件存儲地

ex:         mysqldump -uroot -proot jdbcdemo> C:/shop_bak.sql
導入:

mysql -u賬戶 -p密碼 數據庫名稱< 腳本文件存儲地址

ex:         mysql -uroot -proot jdbcdemo< C:/shop_bak.sql
使用可視化導入導出:
Navicat工具的導入和導出/Navicat工具的備份和還原

 數據索引:

索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。

什么列適合建索引??
1.表的主鍵、外鍵必須有索引;
2.數據量超過30000的表應該有索引;
3.經常與其他表進行連接的表,在連接字段上應該建立索引;
4.經常出現在Where子句中的字段,特別是大表的字段,應該建立索引;
5.索引應該建在選擇性高的字段上;
6.索引應該建在小字段上,對於大的文本字段甚至超長字段,不要建索引;

sql語句創建和刪除索引:
創建索引: 

CREATE INDEX 索引名稱 ON 表名 (列名)

刪除索引:

DROP INDEX 索引名 ON 表名 
ALTER TABLE 表名 DROP INDEX 索引名

 

 

mysql常用的數據類型:

數值類型:INT、FLOAT、DOUBLE

日期和時間類型:DATE、TIME、YEAR、DATETIME

字符串類型:CHAR、VARCHAR、TEXT、LONGTEXT

 

 

 

 

 

 

 

 

 


免責聲明!

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



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