1. 程式人生 > >sql 回顧(mysql)

sql 回顧(mysql)

sql 回顧(mysql)

1. mysql資料型別

一共三種:Text、Number、Data/Time

1.1 Text

1)CHAR(size)            最大255
2)VARCHAR(size) 如果大於255,則自動轉化為TEXT
3)TINYTEXT      存放最大長度為255
4)TEXT          存放最大長度為65535
5)BLOB          用於BLOBs,存放最多65535
6)MEDIUMTEXT            存放最大長度為16,777,215
7)MEDIUMBLOB            存放最大長度為16,777,215
8)LONGTEXT      存放最大長度為4,294,967,295
9)LONGBLOB      存放最大長度為4,294,967,295
10)ENUM(x,y,z,etc.)
11)SET

1.2 Number

1)TINYINT(size) 帶符號-128到127,無符號0到255
2)SMALLINT(size)    帶符號-32768到32767,無符號0到65535
3)MEDIUMINT(size)   帶符號-8388608到8388607,無符號0到16777215
4)INT(size)     帶符號-2147483648到2147483647,無符號0到4294967295
5)BIGINT(size)      帶符號-9223372036854775808到9223372036854775807,無符號0到18446744073709551615
6)FLOAT(size,d) 帶有浮動小數點的小數字。在 size 引數中規定顯示最大位數。在 d 引數中規定小數點右側的最大位數。
7)DOUBLE(size,d)    同上
8)DECIMAL(size,d)   作為字串儲存的 DOUBLE 型別,允許固定的小數點。在 size 引數中規定顯示最大位數。在 d 引數中規定小數點右側的最大位數。

1.3 Date

1)DATE()        格式:YYYY-MM-DD
2)DATETIME()            格式:YYYY-MM-DD HH:MM:SS
3)TIMESTAMP()           時間戳,支援範圍:從 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
4)TIME()        格式:HH:MM:SS
5)YEAR()        2 位或 4 位格式的年。4 位格式所允許的值:1901 到 2155。2 位格式所允許的值:70 到 69,表示從 1970 到 2069。

2. CRUD

select column_name from table_name                                     // 查看錶的某些列
select distinct column_name from table_name                            // 查看錶的某些列,並且行去重
where                                                                          // 篩選條件
and or
order by column_name ASC|DESC                                               // 根據某列資料進行排序
insert into table_name value (value1,value2,...)                            // 表插入資料
insert into table_name (column_name,column_name,...) values (v1,v2,v3,...)  // 表指定列插入資料
update table_name set column_name1=value1,column_name2=value2,... where ......  // 更新表指定行資料
delete from table_name where ......                                     // 與truncate table_name不同的是,可回滾

3. 高階查詢

1)limit

select * from table_name limit x // 限制行數

2)like

select * from table_name where name like '...' // 定義模糊查詢

3)萬用字元

%                   代替0個或多個字元
_                   代替一個字元
[charlist]              字元列表中的任意一個字元
[^charlist]/[!charlist]                 不在字元列表中的任意一個字元      
^                   以此開頭字元

4)in

select * from table_name where name in (......) // 允許在where中定義多個值

5)between...and...

select * from table_name where column_name between x and y // 在某個範圍內的

6)not

可以加在in和between前面表示取反

7)as

可以給列或者表取別名

8)join

inner join:如果表中至少一個匹配,則返回行 // 兩邊都要滿足條件


left join:即使右表中沒有匹配,也返回行 // 滿足左邊


right join:即使左表中沒有匹配,也返回行 // 滿足右邊


full join:只要其中一個表中存在,則返回行 // 保證兩張表的資料全量

9)union

合併select查詢到的結果,需要查詢的是相同的欄位。例如:

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;

這樣的話兩張表中相同的列會進行去重

可以使用union all進行合併,取消去重

4. sql索引

在不讀取整個表的情況下,索引使資料庫能夠更快的查詢資料

使用者是無法看到索引的,它們只是用來加速查詢,但是有索引的表插入資料的時候會更慢一些,因為插入的同時會更新索引

create index index_name on table_name (column_name)     // 允許使用重複值
create unique index index_name on table_name (column_name)  // 不允許使用重複值

5. sql常用函式:

Aggregate:

1)AVG() -   返回平均值
2)COUNT()   -   返回行數
3)FIRST()   -   返回第一個值
4)LAST()    -   返回最後一個值
5)MAX() -   返回最大值
6)MIN() -   返回最小值
7)SUM() -   返回總和

Scalar:

1)UCASE()           -   將某個欄位轉換為大寫
2)LCASE()           -   將某個欄位轉化為小寫
3)MID()         -   從某個文字欄位提取字元
4)SubString(欄位,1,end)   -   從某個文字欄位提取字元
5)LEN()         -   返回某個文字欄位的長度
6)ROUND()           -   對某個數值欄位進行指定小數位數的四捨五入
7)NOW()         -   返回當前系統的日期和時間
8)FORMAT()          -   格式化某個欄位的顯示方式