id | name | url | alexa | country |
---|---|---|---|---|
1 | https://www.google.cm/ | 1 | USA | |
2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
4 | 微博 | http://weibo.com/ | 20 | CN |
5 | https://www.facebook.com/ | 3 | USA | |
6 | stackoverflow | http://stackoverflow.com/ | 0 | IND |
选取 name 以一个任意字符开始,然后是 “oogle” 的所有客户:
SELECT * FROM Websites
WHERE name LIKE '_oogle';
选取 name 以 “G”、“F” 或 “s” 开始的所有网站:
SELECT * FROM Websites
WHERE name REGEXP '^[GFs]';
选取 name 以 A 到 H 字母开头的网站:
SELECT * FROM Websites
WHERE name REGEXP '^[A-H]';
选取 name 不以 A 到 H 字母开头的网站
SELECT * FROM Websites
WHERE name REGEXP '^[^A-H]';
选取 name 为 “Google” 或 “菜鸟教程” 的所有网站:
SELECT * FROM Websites
WHERE name IN ('Google','菜鸟教程');
选取 alexa 介于 1 和 20 之间的所有网站:
SELECT * FROM Websites
WHERE name BETWEEN 1 AND 20;
INNER JOIN 关键字在表中存在至少一个匹配时返回行。
“access_log”表格记录了网站的访问数据:
aid | site_id | count | date |
---|---|---|---|
1 | 1 | 45 | 2016-05-10 |
2 | 3 | 100 | 2016-05-13 |
3 | 1 | 230 | 2016-05-14 |
4 | 2 | 10 | 2016-05-14 |
5 | 5 | 205 | 2016-05-14 |
6 | 4 | 13 | 2016-05-15 |
7 | 3 | 220 | 2016-05-15 |
8 | 5 | 545 | 2016-05-16 |
9 | 3 | 201 | 2016-05-17 |
SELECT Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count;
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
上例的写法:
SELECT Websites.name, access_log.count, access_log.date
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;
和 LEFT JOIN 同理。
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行。
SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
只复制中国的网站插入到新表中:
SELECT *
INTO WebsitesBackup2016
FROM Websites
WHERE country='CN';
复制多个表中的数据插入到新表中:
SELECT Websites.name, access_log.count, access_log.date
INTO WebsitesBackup2016
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id;
复制 “apps” 中的数据插入到 “Websites” 中:
INSERT INTO Websites(name,country)
SELECT app.name,country FROM apps;
CREATE DATABASE my_db;
CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
1. 强制 “P_Id” 列和 “LastName” 列不接受 NULL 值:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
2. UNIQUE 约束唯一标识数据库表中的每条记录
1)在 “Persons” 表创建时在 “P_Id” 列上创建 UNIQUE 约束:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
)
)
2)当表已被创建时,如需在 “P_Id” 列创建 UNIQUE 约束,请使用下面的 SQL:
ALTER TABLE Persons
ADD UNIQUE (P_Id)
3)如需撤销 UNIQUE 约束,请使用下面的 SQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID
3. PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
1) 在 “Persons” 表创建时在 “P_Id” 列上创建 PRIMARY KEY 约束:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
2)当表已被创建时,如需在 “P_Id” 列创建 PRIMARY KEY 约束,请使用下面的 SQL:
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)
3)如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:
ALTER TABLE Persons
DROP PRIMARY KEY
4. FOREIGN KEY 约束指向另一个表中的 UNIQUE KEY(唯一约束的键)。
“Orders” 表中的 “P_Id” 列是 “Orders” 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的行为。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
在 “Orders” 表创建时在 “P_Id” 列上创建 FOREIGN KEY 约束:
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
当 “Orders” 表已被创建时,如需在 “P_Id” 列创建 FOREIGN KEY 约束,请使用下面的 SQL:
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
5. CHECK约束用于限制列中的值的范围。
在 “Persons” 表创建时在 “P_Id” 列上创建 CHECK 约束。CHECK 约束规定 “P_Id” 列必须只包含大于 0 的整数。
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)
当表已被创建时,如需在 “P_Id” 列创建 CHECK 约束,请使用下面的 SQL:
ALTER TABLE Persons
ADD CHECK (P_Id>0)
如需撤销 CHECK 约束,请使用下面的 SQL:
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
6. DEFAULT 约束用于向列中插入默认值。
在 “Persons” 表创建时在 “City” 列上创建 DEFAULT 约束:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
当表已被创建时,如需在 “City” 列创建 DEFAULT 约束,请使用下面的 SQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
如需撤销 DEFAULT 约束,请使用下面的 SQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT
CREATE INDEX 语句用于在表中创建索引。
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
在 “Persons” 表的 “LastName” 列上创建一个名为 “PIndex” 的索引:
CREATE INDEX PIndex
ON Persons (LastName)
如果您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PIndex
ON Persons (LastName, FirstName)