SQL (Structured Query Language:结构化查询语言) 是用于管理关系型数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。
SELECT column_name,column_name
FROM table_name;
SELECT * FROM table_name;
SELECT DISTINCT country FROM Websites;
WHERE子句中的运算符:
运算符 | 描述 |
---|---|
= | 等于 |
<> | 不等于。**注释:**在 SQL 的一些版本中,该操作符可被写成 != |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
IN | 指定针对某个列的多个可能值 |
and | 与,同时满足两个条件的值 |
or | 或,满足其中一个条件的值 |
not | 非,满足不包含该条件的值 |
is null | 空值判断 |
Select * from emp where comm is null; 查询 emp 表中 comm 列中的空值。
Select * from emp where sal between 1500 and 3000; 查询 emp 表中 SAL 列中大于 1500 的小于 3000 的值。
Select * from emp where sal in (5000,3000,1500); 查询 EMP 表 SAL 列中等于 5000,3000,1500 的值。
Select * from emp where ename like 'M%'; 查询 EMP 表中 Ename 列中有 M 的值,M 为要查询内容中的模糊信息。
% 表示多个字值,_ 下划线表示一个字符;
M% : 通配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。
%M% : 表示查询包含M的所有内容。
%M_ : 表示查询以M在倒数第二位的所有内容。
SELECT * FROM Websites
WHERE alexa > 15
AND (country='CN' OR country='USA');
SELECT * FROM Websites
ORDER BY alexa DESC; Descending
SELECT * FROM Websites
ORDER BY country,alexa; 按照 "country" 和 "alexa" 列排序
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
DELETE FROM table_name
WHERE some_column=some_value;
在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:
DELETE FROM table_name;
SELECT column_name(s)
FROM table_name
LIMIT number;
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
通配符 | 描述 |
---|---|
% | 替代 0 个或多个字符 |
_ | 替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist]或[!charlist] | 不在字符列中的任何单一字符 |
选取 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]';
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
列的 SQL 别名语法:
SELECT column_name AS alias_name
FROM table_name;
把三个列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名:
SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info
FROM Websites;
表的 SQL 别名语法:
SELECT column_name(s)
FROM table_name AS alias_name;
使用 "Websites" 和 "access_log" 表,并分别为它们指定表别名 "w" 和 "a"(通过使用别名让 SQL 更简短):
SELECT w.name, w.url, a.count, a.date
FROM Websites AS w, access_log AS a
WHERE a.site_id=w.id and w.name="菜鸟教程";
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
LEFT JOIN
SELECT <select_list>
FROM tableA
LEFT JOIN tableB
ON A.key=B.key
LEFT JOIN … WHERE
SELECT <select_list>
FROM tableA
LEFT JOIN tableB
ON A.key=B.key
WHERE B.key IS NULL
INNER JOIN = JOIN
SELECT <select_list>
FROM tableA
INNER JOIN tableB
ON A.key=B.key
SELECT <select_list>
FROM tableA
JOIN tableB
ON A.key=B.key
RIGHT JOIN
SELECT <select_list>
FROM tableA
RIGHT JOIN tableB
ON A.key=B.key
RIGHT JOIN … WHERE
SELECT <select_list>
FROM tableA
RIGHT JOIN tableB
ON A.key=B.key
WHERE A.key IS NULL
FULL OUTER JOIN
SELECT <select_list>
FROM tableA
FULL OUTER JOIN tableB
ON A.key=B.key
FULL OUTER JOIN … WHERE
SELECT <select_list>
FROM tableA
FULL OUTER JOIN tableB
ON A.key=B.key
WHERE A.key IS NULL
OR B.key IS NULL
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
或:
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
或:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
或:
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
SQL UNION 语法:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
SQL UNION ALL 语法:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
CREATE TABLE 新表
AS
SELECT * FROM 旧表
从一个表中复制所有的列插入到另一个已存在的表中:
INSERT INTO table2
SELECT * FROM table1;
只复制希望的列插入到另一个已存在的表中:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
CREATE DATABASE dbname;
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
约束类型 | 描述 |
---|---|
NOT NULL | 指示某列不能存储 NULL 值。 |
UNIQUE | 保证某列的每行必须有唯一的值。 |
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合 | 确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 |
FOREIGN KEY | 保证一个表中的数据匹配另一个表中的值的参照完整性。 |
CHECK | 保证列中的值符合指定的条件。 |
DEFAULT | 规定没有给列赋值时的默认值。 |
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name)
在表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
DROP INDEX 语句
ALTER TABLE table_name DROP INDEX index_name
DROP TABLE 语句
DROP TABLE table_name
DROP DATABASE 语句
DROP DATABASE database_name
TRUNCATE TABLE 语句 - 仅仅需要删除表内的数据,但并不删除表本身
TRUNCATE TABLE table_name
在表中添加列:
ALTER TABLE table_name
ADD column_name datatype
删除表中的列:
ALTER TABLE table_name
DROP COLUMN column_name
改变表中列的数据类型:
ALTER TABLE table_name
MODIFY COLUMN column_name datatype
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)
让 AUTO_INCREMENT 序列以其他的值起始:
ALTER TABLE Persons AUTO_INCREMENT=100
创建视图
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
更新视图
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
撤销视图
DROP VIEW view_name
SELECT AVG(column_name) FROM table_name
SELECT COUNT(column_name) FROM table_name;
SELECT COUNT(*) FROM table_name;
SELECT COUNT(DISTINCT column_name) FROM table_name;
SELECT FIRST(column_name) FROM table_name;
mysql:
SELECT column_name FROM table_name
ORDER BY column_name ASC
LIMIT 1;
SELECT LAST(column_name) FROM table_name;
mysql:
SELECT column_name FROM table_name
ORDER BY column_name DESC
LIMIT 1;
SELECT MAX(column_name) FROM table_name;
SELECT MIN(column_name) FROM table_name;
SELECT SUM(column_name) FROM table_name;
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
多表连接:
SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
SELECT Websites.name, Websites.url
FROM Websites
WHERE NOT EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200);
SELECT UCASE(column_name) FROM table_name;
SELECT LCASE(column_name) FROM table_name;
SELECT MID(column_name,start[,length]) FROM table_name;
参数 | 描述 |
---|---|
column_name | 必需。要提取字符的字段。 |
start | 必需。规定开始位置(起始值是 1)。 |
length | 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。 |
SELECT LENGTH(column_name) FROM table_name;
SELECT ROUND(column_name,decimals) FROM TABLE_NAME;
参数 | 描述 |
---|---|
column_name | 必需。要舍入的字段。 |
decimals | 可选。规定要返回的小数位数。 |
SELECT NOW() FROM table_name;
SELECT FORMAT(column_name,format) FROM table_name;
参数 | 描述 |
---|---|
column_name | 必需。要格式化的字段。 |
format | 必需。规定格式。 |