SQL_day_27_約束、表查詢_常用函式
目錄
1.DDL約束條件
- 在建立表的時候,用於限制表中資料的一些引數
1.1新增主鍵
- 建立時新增
create table person(
id int ,
name varchar(100),
income decimal(18,2),
primary key (id,name)
);
- 後期新增主鍵
#比如要對person3表新增id列主鍵
alter table 表名 add primary key(列名,列名...);
1.2新增自增
- 建立
create table person4(
id int auto_increment,
name varchar(200),
primary key(id)
);
- 後補
alter table 表名modify 主鍵列名 型別 auto_increment;
1.3新增外來鍵
- 建立
foreign key(外來鍵列) REFERENCES 關聯表(關聯表中主鍵列)
注意:新增外建時,必須保證要關聯的表已建立
- 後補
alter table 表名 add foreign key (外來鍵列列名) references 指向的表名 (主鍵列列名);
1.4新增unique
- 建立時
unique(id)
或
id int unique ,
- 後補
alter table 表名 add unique (列名);
1.5新增not null和default
- 建立時
sex varchar(10) not null default '男'
- 後補
alter table 表名 modify 列名 資料型別 not null default 預設值;
2.DQL查詢
-
<> : 不等於
-
= : 相等
-
in :在指定資料中
select 列限定 from 表限定 where 列名 in(值1,值2....);
-
like :其中
% 匹配任意個數的任意字元
如 : 把 name中,姓名有兩個字及以上的查詢出來
select * from student where
name like ‘__%’; -
order by:
select 列限定 from 表限定 order by 列名 asc/desc;
Asc : 升序
Desc : 降序 -
Limit:限制條數,通常和order by一起使用,因為我們使用排序之後,再去獲取前幾條資料,比較有價值,比如成績前三名
如 : 查詢學生表,分數前三名的資訊
select * from student order
by score desc limit 3;
3.單表查詢
- Group by :MYSQL中有一類特殊的函式,用於統計,或者分組統計.
- Having: where篩選出的元素在進行篩選
3.1 子查詢
- 將剛剛查找出的結果變成一個子表,當做線索再進行查詢或匹配操作
- select後面
select 欄位名,(查詢語句) from 表名;
- 一定要在兩個表之間找好對應關係(teacher.id必須是主鍵或者必須保證teacher.id在teacher表中是唯一的
- 子查詢中只能有一個欄位(子查詢的結果必須是一行一列)
- from後面
- 我們可以把子查詢當成一張表
- 必須要有別名,因為子查詢優先被執行,子查詢的別名,可以讓別的查詢當做表或者列去操作
- where後面
- 多行資料要用in而不要用=,如果確定子查詢的結果為一行一列的話,就可以用 = 等於
- 如果返回結果為多行一列的話要用 in , 一列是必須的,結果必須是一列
- 子查詢中的SELECT後面只能有一個欄位(多個欄位的話會報錯)
4.常用函式
select version() ;顯示當前MySQL軟體的版本
select database();顯示當前所處資料庫是哪個
select char_length(‘中國’);返回字元個數。
select length(‘中國’);返回字元所佔位元組數,MySQL中,一個UTF8編碼的漢字佔3個位元組
select concat( ‘a’, ‘b’, ‘c’, ‘d’);返回 ‘abcd’。字串拼接函式
select concat_ws( ‘=’, ‘a’, ‘b’, ‘c’);返回 ‘a=b=c’。字串拼接函式,第一個是拼接間隔符
select upper(‘abcd’);返回ABCD。將引數中所有小寫字母轉換為大寫
select lower(‘ABCD’);返回abcd。將引數中所有大寫字母轉換為小寫
select substring( ‘系統資訊類’, 1, 3 );返回 系統信。第2個引數代表從1開始的第幾個字元,第3個引數代表擷取字元個數
select trim(’ abc ');返回 abc。用於刪去引數左右的所有空格
select curdate();返回當前日期
select curtime();返回當前時間
select now();返回當前日期時間
select unix_timestamp();返回當前日期時間對應的時間戳(單位秒)
select unix_timestamp(‘2018-05-24 20:00:00’);返回引數指定的日期時間對應的時間戳(單位秒)
select from_unixtime(1527163397);返回引數指定時間戳(單位秒)對應的日期時間
select datediff( ‘2018-05-23’, now() );返回兩個引數對應日期相差的天數(用第一個引數減第二個引數)
select adddate( now(), -2 );返回指定天數前/後的日期時間(第一個引數是日期時間,第二個引數是天數,向後加是正數,向前減是負數)
select year(‘2019-02-24’);返回2019 獲得年份
select month(‘2019-02-24’) 返回2
獲得月份
select day(‘2019-02-24’) 返回
24 獲取日
select if( <判斷條件>, <條件為真時的返回值>, <條件為假時的返回值> );相當於Java中的三目運算子<判斷條件>
? <條件為真的返回值> : <條件為假的返回值>。
如select if(1=1, 2, 3);返回2。
select ifnull(<表示式或者欄位>, <表示式或者欄位為NULL時的返回值>);通常用於給有可能有NULL的情況下的提供預設值。
select ifnull(null,‘無名氏’) ; null這裡可以寫列名 就會把該列值為null的
以無名氏顯示
select ifnull(name,‘無名氏’) from teacher ;