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ù)庫
CREATE DATABASE
IF NOT EXISTS date_name DEFAULT charset utf8;
- 切換數(shù)據(jù)庫
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è)以上的條件對記錄進(jìn)行過濾。
-- 從 "Websites" 表中選取 alexa 排名大于 "15" 且國家為 "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) 來操作正則表達(dá)式。下面的 SQL 語句選取 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 語句選取 alexa 介于 1 和 20 之間的所有網(wǎng)站:
SELECT * FROM Websites
WHERE alexa BETWEEN 1 AND 20;
- SQL別名 通過使用 SQL,可以為表名稱或列名稱指定別名。
基本上,創(chuàng)建別名是為了讓列名稱的可讀性更強(qiáng)。在下面的情況下,使用別名很有用:- 在查詢中涉及超過一個(gè)表
- 在查詢中使用了函數(shù)
- 列名稱很長或者可讀性差
- 需要把兩個(gè)列或者多個(gè)列結(jié)合在一起
-- 列的 SQL 別名語法
SELECT column_name AS alias_name
FROM table_name;
表的 SQL 別名語法
SELECT column_name(s)
FROM table_name AS alias_name;
- JOIN 用于把來自兩個(gè)或多個(gè)表的行結(jié)合起來.不同的 SQL JOIN
可以使用的不同的 SQL JOIN 類型:- INNER JOIN:如果表中有至少一個(gè)匹配,則返回行
- LEFT JOIN:即使右表中沒有匹配,也從左表返回所有的行
- RIGHT JOIN:即使左表中沒有匹配,也從右表返回所有的行
- FULL JOIN:只要其中一個(gè)表中存在匹配,則返回行
select * from table1 join table2 on id_1 = id_2;
- UNION 操作符合并兩個(gè)或多個(gè) SELECT 語句的結(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ī)定(通過 CREATE TABLE 語句),或者在表創(chuàng)建之后規(guī)定(通過 ALTER TABLE 語句)。
在 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ī)定沒有給列賦值時(shí)的默認(rèn)值。
CREATE INDEX 語句用于在表中創(chuàng)建索引。在不讀取整個(gè)表的情況下,索引使數(shù)據(jù)庫應(yīng)用程序可以更快地查找數(shù)據(jù)。
AUTO INCREMENT 會(huì)在新記錄插入表中時(shí)生成一個(gè)唯一的數(shù)字。
-- 給已經(jīng)存在的colume添加自增語法:
ALTER TABLE table_name CHANGE column_name column_name data_type(size) constraint_name AUTO_INCREMENT;
- SELECT DISTINCT 去除表中重復(fù)項(xiàng)
