標籤:左右 資料操作 time ref desc lte ima 語句 regexp
1、SQL語句分為資料操作語言(DML)和資料定義語言 (Data Definition Language)(DDL)
資料操作語言部分:
- select 擷取資料
- update 更新資料
- delete刪除資料
- insert into 插入資料
資料定義語言 (Data Definition Language)部分:
- create database 建立新資料庫
- alter database 修改資料庫
- create table建立新表
- alter table 修改資料表
- drop table 刪除表
- create index 建立索引
- drop index 刪除索引
2、 文法
(1)select語句
SELECT 列名稱 FROM 表名稱
列名可以是*,會查詢出所有列
(2)select distinct語句
SELECT DISTINCT 列名稱 FROM 表名稱
只會查詢出值不同的行
(3)where子句
SELECT 列名稱 FROM 表名稱 WHERE 列 運算子 條件值
為別的語句添加條件,運算子有=,!=,>,<,<=,>=,between,like
條件值如果是字串用‘‘括起來
like的使用文法是select 列名稱 from 表名稱 where 列名稱 like 匹配條件
匹配條件是‘a%‘,就是篩選出這個列中以a開頭的所有行,%是萬用字元
and和or,用於分隔條件,and是與,or是或
(4)order by語句
SELECT 列名稱 FROM 表名稱 order by 列名稱
會根據列進行升序操作
SELECT 列名稱 FROM 表名稱 order by 列名稱 desc
會根據列進行降序操作
(5)insert into語句
insert into 表名稱 (列1,列2) values(值1,值2)
insert into 表名稱 values(值1,值2)
(6)update語句
更新某一列
update 表名稱 set 列名稱=值2 where 列名稱=值1
更新某幾列
update 表名稱 set 列1=值1,列2=值2 where 列1=值3
(7)delete語句
刪除某一行
delete from 表名稱 where 列1=值1
刪除所有行,保留表結構
delete from 表名稱
delete * from 表名稱
(8)top子句和 top percent子句
選取前2條記錄
select 列名稱 from 表名稱 limit 2
mysql不支援top子句,top percent子句也不支援
(9)in子句
匹配多個值
select 列名稱 from 表名稱 where 列名稱 in (值1,值2)
(10)between子句
mysql的between查詢結果會包括值1和值2,資料庫不同這個結果可能不同
select 列名稱 from 表名稱 where 列名稱 between 值1 and 值2
在between前加個not,會查詢出相反的結果
select 列名稱 from 表名稱 where 列名稱 not between 值1 and 值2
3、
(1)萬用字元
使用萬用字元是一般是搭配like子句
%代表任意多字元
_代表任意一個字元
[^asd]/[!asd]除了asd之外的任意一個字元(在mysql中!是沒用的,必須要用^)
[asd]asd中的任意一個字元(在mysql中like是不能跟[]搭配的,[]必須要跟regexp搭配)
當使用regexp時,匹配田間就不是%和_,而是^(非),*(匹配前面的子運算式0次或多次),+(匹配前面的子運算式一次或多次),{n}(例如a{2}匹配2個a),{n,m}(例如a{2,3}匹配a最少2個最多3個)
(2)alias別名
表名的別名
select 列名稱 from 表名稱 as 表別名
列的別名
select 列名稱 as 列別名 from 表名
(3)關聯2個表
可以通過外部索引鍵關聯
select 表1.列1 表2.列1 from 表1,表2 where 表1主鍵名=表2列名
也可以通過join:
inner join:在表中存在至少一個匹配,返回該行
left join:從左表返回所有行,即使右表沒有匹配
right join:從右表返回所有行,即使左表沒有匹配
full join:會返回所有行,即使左右表都沒有匹配
(4)合并多個結果集
union語句
合并不重複的值
select語句1 union select語句2
合并不重複的值
select語句1 union all select語句2
(5)把列插入到另一個表中
select 表名稱 into 新表名[資料庫名] from 舊錶名
(6)sql約束
not null 如果不向欄位添加值,就無法更新資料或插入資料
unique唯一,但是可為空白 建表時在最後一行加上unique key(列名)即可
撤銷unique約束alter table 表名稱 drop index 列名稱
primary key主鍵
撤銷主鍵使用alter table 表名稱 drop primary key
foreign key 外鍵 foreign key (本表列名) references 其他表名稱(其他表主鍵)
撤銷外鍵約束alter table 表名稱 drop foreign key 外鍵名
check約束 用於約束列中值得範圍 check(類名稱>0)類中的值要大於0
撤銷check約束alter table 表名稱 drop constraint 被check約束列名稱
defuault預設
將預設值添加到有default約束的列
撤銷default約束alter table 表名稱 alter 列名稱 drop default
(7)索引
create index語句用於建立索引,所有可以使用重複的值,索引值不能是數字
create index 索引名 on 表名稱(列名稱)
建立唯一索引:2行不能擁有一樣的索引值
create unique index 索引名 on 表名稱(列名稱)
刪除索引alter table 表名稱 drop index 索引名
(8)改變表結構操作
刪除表中所有資料:drop table 表名稱
刪除表中所有資料,保留表結構 :truncate table 表名稱
添加列:alter table 表名稱 add 列名稱 資料類型
刪除列:alter table 表名稱 drop column 列名稱
改變列資料類型:alter table 表名稱 alter column 列名稱 新資料類型
(9)auto-increment自增,只有主鍵才能使用這個約束,每次更新加1,從1開始
改變起始值:alter table 表名稱 auto-increment=值1
(10)時間函數
now()當前日期時間
curdate()當前日期
curtime()目前時間
date_format()格式化時間
(11)函數
select 函數名(列名稱) from 表名稱
avg()平局值
count()行數
max()最高值
min()最低值
sum()總和
group by語句 用於對結果集進行分組,通常用於合計函數,合并相同名稱的行
select 列名稱 sum(列名稱) from 表名稱 group by 列名稱
having子句:合計函數不能增加where條件判斷,要使用having子句
select 列名稱,函數名(列名稱) from 表名稱 having 函數名(列名稱)<200
ucase()轉為大寫
select ucase(列名稱) from 表名稱
lcase()轉為小寫
mid()從欄位中提取字元
select mid(列名,起始位置,提取長度)from 表名
提取長度屬性是可選的
len()返回欄位長度
round()格式化小數
select round(列名稱,小數位元)from 表名稱
mysql學習筆記