1. 程式人生 > 其它 >SQL_day_27_約束、表查詢_常用函式

SQL_day_27_約束、表查詢_常用函式

技術標籤:SQL資料庫sql

目錄

  1. DDL約束條件
  2. DQL查詢
  3. 單表查詢
  4. 常用函式

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 子查詢

  • 將剛剛查找出的結果變成一個子表,當做線索再進行查詢或匹配操作
  1. select後面select 欄位名,(查詢語句) from 表名;
    • 一定要在兩個表之間找好對應關係(teacher.id必須是主鍵或者必須保證teacher.id在teacher表中是唯一的
    • 子查詢中只能有一個欄位(子查詢的結果必須是一行一列
  2. from後面
    • 我們可以把子查詢當成一張表
    • 必須要有別名,因為子查詢優先被執行,子查詢的別名,可以讓別的查詢當做表或者列去操作
  3. 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 ;