資料庫——MySQL(二)(增刪查改、去重,分頁、模糊查詢、排序)
阿新 • • 發佈:2019-02-16
新增所有列的記錄:
● 語法:insert into 表名稱 values (值1,值2,值3,...值n);
● 例子:insert into user values(‘張三’,‘演員’,22,‘男’);
注意:必須把所有列都進行新增,並且新增值的順序需要與建表時列的順序一致。新增值的資料型別要與列的資料型別相對應,數字型資料型別直接寫,其他型別的值需要單引號引起來。replace也可以插入資料,相當於insert
------------------------------------------------------------------------------------------------------------------
新增指明列的記錄:
● 語法:insert into 表名稱(列名1,列名2,...列名n) values (值1,值2,...值n);
● 例子:insert into user (name,age,sex) values (‘張三’,22,‘男’);
注意:指明列的順序可以不和建表時的順序相同,新增值需要和指明列相對應,未指明列為預設值(default指定的值或者null)。同時,未指明列必須滿足約束條件(如:列設定了not null,並且沒有設定default)
------------------------------------------------------------------------------------------------------------------
修改列的所有記錄:
● 語法:update 表名稱 set 列名=值;
● 例子:update user set name=‘李四’;(把name列的值全部修改為‘李四’)
注意:在set關鍵字後跟上需要修改的列名和值的鍵值對。修改的許可權小於表的約束許可權,修改記錄時必須滿足表的約束條件,否則會報錯
------------------------------------------------------------------------------------------------------------------
修改指明列的記錄:
● 語法:update 表名稱 set 列名=值 where 條件;
● 例子:update user set name=‘李四’ where sex=‘男’;(把sex為‘男’的記錄的name列的值全部修改為‘李四’)
注意:修改列為多個時使用逗號分隔。條件為多個時使用and或者or分隔。如果沒有where條件則指明列的資料都會被修改
------------------------------------------------------------------------------------------------------------------
刪除所有的記錄:
● 語法:delete from 表名稱;
● 語法:truncate 表名稱;
注意:兩種方法都可以使用。但是刪除記錄時慎重,事物提交後無法恢復刪除記錄。要想恢復很複雜。truncate速度更快,佔用日誌更少(直接釋放資料頁並且在事物日誌中也只記錄資料頁的釋放)。而delete一行一行刪除,在事物日誌中要記錄每一條記錄的刪除
------------------------------------------------------------------------------------------------------------------
刪除指明條件的記錄:
● 語法:delete from 表名稱 where 條件;
● 例子:delete from user where name=‘張三’;(刪除name為‘張三’的所有記錄)
------------------------------------------------------------------------------------------------------------------
查詢所有的記錄:
● 語法:select * from 表名稱;
● 例子:select * from user;
注意:* 表示所有的列
------------------------------------------------------------------------------------------------------------------
查詢指明列的所有記錄:
● 語法:select 列名 from 表名稱;
● 例子:select name from user;
注意:多個列時,列名與列名之間使用逗號分隔,最後一個列名不需要逗號
------------------------------------------------------------------------------------------------------------------
查詢時使用別名:
● 語法:select 列名 as‘別名’ from 表名稱;
● 例子:select name as‘姓名’ from user;
注意:as關鍵字可以省略,多個列時不是所有的列都必須新增別名。別名只修改查詢時列的名稱,真正表的列名不會被修改
------------------------------------------------------------------------------------------------------------------
查詢時使用算術運算子:(+、-、*、/)
● 語法:select 列名+值 from 表名稱;
● 例子:select age+20 from user;
注意:算術運算子只作用在數值型別的列上。可以是固定值,也可以指定某列
------------------------------------------------------------------------------------------------------------------
帶條件的查詢:(>、<、=、>=、<=、!=(另一種寫法<>))
● 語法:select * from 表名稱 where 條件;
● 例子:select * from user where name=‘張三’;(查詢name為‘張三’的所有記錄)
------------------------------------------------------------------------------------------------------------------
去除重複記錄:(distinct)
● 語法:select distinct 列名 from 表名稱;
● 例子:select distinct age from user;
注意:distinct緊跟著在select關鍵字之後。如果查詢多個列則會把查詢的所有列的值進行拼接後,在去重
------------------------------------------------------------------------------------------------------------------
分頁:(limit)
● 語法:select * from 表名稱 limit m,n;
● 公式:select * from 表名稱 limit((頁碼-1) * 行數),行數;
● 例子:select * from user limit 0,10;
注意:m表示從多少下標位開始(預設從0開始),n表示顯示多少條記錄。m如果省略掉。則預設從0下標位開始顯示記錄
------------------------------------------------------------------------------------------------------------------
複製查詢出來的表結構及記錄:
● 語法:create table 新表名稱 as select * from 表名稱;
● 例子:create table user1 as select * from user ;
注意:as關鍵字可以省略。複製的表不會把原表中的主外來鍵約束進行復制
------------------------------------------------------------------------------------------------------------------
只複製表結構不復制記錄:
● 語法:create table 新表名稱 select * from 表名稱 where 條件;
● 例子:create table user1 select * from user where 1=2 ;
注意:只需where條件為假就行
------------------------------------------------------------------------------------------------------------------
多條件的查詢:(and、or、not)
● and:並且的意思,查詢的記錄必須都滿足條件
● or: 或者的意思,查詢的記錄只需滿足其中一個條件
● not:取條件表示式的反值
● 語法:select * from 表名稱 where 條件;
● 例子:select * from user where not name=‘張三’;(查詢出name不為‘張三’的所有記錄)
注意:在條件與條件之間需使用and、or把條件進行連線起來
------------------------------------------------------------------------------------------------------------------
查詢空值的記錄:(null、‘’)
● 語法:select * from 表名稱 where 列名 is null or 列名=‘’;
● 例子:select * from user where name is null or name=‘’;
注意:查詢空值必須兩個條件都寫,查詢null時只用is null。查詢非空is not null
------------------------------------------------------------------------------------------------------------------
查詢區間記錄:(between)
● 語法: select * from 表名稱 where 列名 between m and n;● 例子:select * from user where age between 20 and 50;(查詢出age>=20並且<=50的所有記錄)
注意:在m、n之間的記錄,幷包含m、n。and前寫小值,and後寫大值。between相當於age>=20 and age<=50的簡寫
------------------------------------------------------------------------------------------------------------------
查詢具體值的記錄:(in)
● 語法:select * from 表名稱 where 列名 in(值1,值2,....值n);
● 例子:select * from user where age in(20,22,23);(查詢出age為20,22,23的所有記錄)
注意:in相當於age=20 or age=22 or age=23的簡寫
------------------------------------------------------------------------------------------------------------------
模糊查詢:(like、not like)
● 語法:select * from 表名稱 where 列名 like ‘條件’;
● 例子:select * from user where name like ‘%三%’;(查詢出name含有三的所有記錄)
注意:%表示任意長度的字元。_表示一個長度的字元
------------------------------------------------------------------------------------------------------------------
正則查詢:(rlike)
● 語法:select * from 表名稱 where 列名 rlike ‘[條件]’;
● 例子:select * from user where name rlike ‘[張王]三’;(查詢出張三或王三的所有記錄)
● 例子:select * from user where name rlike ‘[^張王]三’;(查詢出除了張三或王三的所有記錄)
注意:[...]範圍也可以為[0-9][a-z],也可以寫固定的值
------------------------------------------------------------------------------------------------------------------
查詢出來的結果進行排序:(order by)
● 語法:select * from 表名稱 order by 排序列名 排序要求;
● 語法:select * from 表名稱 order by 排序列名 排序要求,排序列名 排序要求;(多列排序)
● 例子:select * from user order by age desc;(查詢出來的記錄根據age的降序排序)
注意:排序是對整行記錄進行排序。desc表示降序,asc表示升序,如果省略了asc或者desc預設為升序
------------------------------------------------------------------------------------------------------------------
自己整理,有些地方是扒拉的,如有侵犯,還望告知