SQL: Structured Query Language
-
DOL: create / drop /alter
-
DML: insert / delete / update
-
DQL: select
-
DCL: grant / revoke
DOL: create / drop /alter
- 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)
CREATE DATABASE
IF NOT EXISTS date_name DEFAULT charset utf8;
- 切換數(shù)據(jù)庫(kù)
USE date_name;
- 刪除表
DROP TABLE IF EXISTS tb_dept;
- 創(chuàng)建表驱闷,能夠唯一確定一條記錄的列可以設(shè)置為主鍵
CREATE TABLE tb_dept
(
-- deptno 不能為空
deptno INTEGER NOT NULL COMMENT '部門編號(hào)',
dename VARCHAR(20) NOT NULL COMMENT '部門名稱',
dloc VARCHAR(10) COMMENT '所在地',
PRIMARY KEY (deptno)
);
- 向已知表添加數(shù)據(jù)項(xiàng)
ALTER TABLE tb_dept ADD ddate date COMMENT '成立日期';
- 向表添加數(shù)據(jù)
INSERT INTO tb_dept VALUES (10, '財(cái)務(wù)部', '成都', NOW());
INSERT INTO tb_dept (deptno, dename) VALUES (20, '研發(fā)部');
INSERT INTO tb_dept (deptno, dename) VALUES (30, '銷售1部'), (40, '銷售2部'), (50, '后勤部');
- 刪除數(shù)據(jù)(注意:帶上條件)
DELETE FROM tb_dept WHERE deptno=50;
- 更新數(shù)據(jù)
UPDATE tb_dept SET dloc='深圳', ddate='2018-4-1' WHERE deptno=30;
DQL: select
- WHERE 子句用于提取那些滿足指定標(biāo)準(zhǔn)的記錄里伯。
-- 查詢country='CN'的網(wǎng)址
SELECT * FROM Websites WHERE country='CN';
- AND & OR 運(yùn)算符用于基于一個(gè)以上的條件對(duì)記錄進(jìn)行過(guò)濾激况。
-- 從 "Websites" 表中選取 alexa 排名大于 "15" 且國(guó)家為 "CN" 或 "USA" 的所有網(wǎng)站
SELECT * FROM Websites
WHERE alexa > 15
AND (country='CN' OR country='USA');
- ORDER BY 按照某個(gè)標(biāo)準(zhǔn)排序查詢
-- 從 "Websites" 表中選取所有網(wǎng)站碎紊,并按照 "alexa" 列降序排序
SELECT * FROM Websites
ORDER BY alexa DESC;
- LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式唱较。
-- 選取 name 以字母 "G" 開始的所有客戶:
SELECT * FROM Websites
WHERE name LIKE 'G%';
-
通配符 可用于替代字符串中的任何其他字符天梧。在 SQL 中戚丸,通配符與 SQL LIKE 操作符一起使用。SQL 通配符用于搜索表中的數(shù)據(jù)裸违。
在 SQL 中掖桦,可使用以下通配符:
通配符
-- 選取 url 以字母 "https" 開始的所有網(wǎng)站
SELECT * FROM Websites
WHERE url LIKE 'https%';
- MySQL 中使用 REGEXP 或 NOT REGEXP 運(yùn)算符 (或 RLIKE 和 NOT RLIKE) 來(lái)操作正則表達(dá)式。下面的 SQL 語(yǔ)句選取 name 以 "G"供汛、"F" 或 "s" 開始的所有網(wǎng)站:
SELECT * FROM Websites
WHERE name REGEXP '^[GFs]';
- IN 操作符 允許在 WHERE 子句中規(guī)定多個(gè)值
-- 選取 name 為 "Google" 或 "Baidu" 的所有網(wǎng)站
SELECT * FROM Websites
WHERE name IN ('Google','Baidu');
- BETWEEN 操作符 用于選取介于兩個(gè)值之間的數(shù)據(jù)范圍內(nèi)的值枪汪。
-- 下面的 SQL 語(yǔ)句選取 alexa 介于 1 和 20 之間的所有網(wǎng)站:
SELECT * FROM Websites
WHERE alexa BETWEEN 1 AND 20;
- SQL別名 通過(guò)使用 SQL凛俱,可以為表名稱或列名稱指定別名。
基本上料饥,創(chuàng)建別名是為了讓列名稱的可讀性更強(qiáng)。在下面的情況下朱监,使用別名很有用:- 在查詢中涉及超過(guò)一個(gè)表
- 在查詢中使用了函數(shù)
- 列名稱很長(zhǎng)或者可讀性差
- 需要把兩個(gè)列或者多個(gè)列結(jié)合在一起
-- 列的 SQL 別名語(yǔ)法
SELECT column_name AS alias_name
FROM table_name;
表的 SQL 別名語(yǔ)法
SELECT column_name(s)
FROM table_name AS alias_name;
- JOIN 用于把來(lái)自兩個(gè)或多個(gè)表的行結(jié)合起來(lái).不同的 SQL JOIN
可以使用的不同的 SQL JOIN 類型:- INNER JOIN:如果表中有至少一個(gè)匹配岸啡,則返回行
- LEFT JOIN:即使右表中沒(méi)有匹配,也從左表返回所有的行
- RIGHT JOIN:即使左表中沒(méi)有匹配赫编,也從右表返回所有的行
- FULL JOIN:只要其中一個(gè)表中存在匹配巡蘸,則返回行
select * from table1 join table2 on id_1 = id_2;
- UNION 操作符合并兩個(gè)或多個(gè) SELECT 語(yǔ)句的結(jié)果。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
- 新表復(fù)制舊表
CREATE TABLE 新表 SELECT * FROM 舊表
- INSERT INTO SELECT 從一個(gè)表復(fù)制數(shù)據(jù)擂送,然后把數(shù)據(jù)插入到一個(gè)已存在的表中悦荒。當(dāng)然也可以復(fù)制制定項(xiàng)。
INSERT INTO table2 SELECT * FROM table1;
-
SQL 約束用于規(guī)定表中的數(shù)據(jù)規(guī)則嘹吨。如果存在違反約束的數(shù)據(jù)行為搬味,行為會(huì)被約束終止。約束可以在創(chuàng)建表時(shí)規(guī)定(通過(guò) CREATE TABLE 語(yǔ)句)蟀拷,或者在表創(chuàng)建之后規(guī)定(通過(guò) ALTER TABLE 語(yǔ)句)碰纬。
在 SQL 中,我們有如下約束:- NOT NULL - 指示某列不能存儲(chǔ) NULL 值问芬。
- UNIQUE - 保證某列的每行必須有唯一的值悦析。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的結(jié)合。確保某列(或兩個(gè)列多個(gè) 列的結(jié)合)有唯一標(biāo)識(shí)此衅,有助于更容易更快速地找到表中的一個(gè)特定的記錄强戴。
- FOREIGN KEY - 保證一個(gè)表中的數(shù)據(jù)匹配另一個(gè)表中的值的參照完整性。
- CHECK - 保證列中的值符合指定的條件挡鞍。
- DEFAULT - 規(guī)定沒(méi)有給列賦值時(shí)的默認(rèn)值骑歹。
CREATE INDEX 語(yǔ)句用于在表中創(chuàng)建索引。在不讀取整個(gè)表的情況下墨微,索引使數(shù)據(jù)庫(kù)應(yīng)用程序可以更快地查找數(shù)據(jù)陵刹。
AUTO INCREMENT 會(huì)在新記錄插入表中時(shí)生成一個(gè)唯一的數(shù)字。
-- 給已經(jīng)存在的colume添加自增語(yǔ)法:
ALTER TABLE table_name CHANGE column_name column_name data_type(size) constraint_name AUTO_INCREMENT;
- SELECT DISTINCT 去除表中重復(fù)項(xiàng)