基础语法
注意 本人的博客都迁移到本人自己搭建的博客地址,通过此处可查看。
1. SELECT
说明
SELECT
语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)。
语法
SELECT columnname1, columnname2,... FROM table_name
SELECT * FROM table_name
2. DISTINCT
说明
在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词DISTINCT
用于返回唯一不同的值。
语法
SELECT DISTINCT column_name FROM table_name
3. WHERE 子句
说明
有条件地从表中选取数据,可将WHERE
子句添加到SELECT
语句。
语法
SELECT column_name FROM table_name WHERE condition(s)
condition(s): column_name operator value
操作符(operator) | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
例如:
SELECT * FROM Persons WHERE City='Beijing'
SELECT * FROM Persons WHERE Year>1965
4. AND和OR
说明
AND
和OR
可在WHERE
子语句中把两个或多个条件结合起来。如果第一个条件和第二个条件都成立,则AND
运算符显示一条记录。如果第一个条件和第二个条件中只要有一个成立,则OR
运算符显示一条记录。
语法
SELECT * FROM table_name WHERE (column_name1='value1' OR column_name1='value2')
AND column_name3='value3'
5. ORDER BY语句
说明
ORDER BY
语句用于根据指定的列对结果集进行排序。默认按照升序对记录进行排序。如果希望按照降序对记录进行排序,可以使用DESC关键字。
语法
SELECT column_name FROM table_name ORDER BY columnname1
SELECT column_name FROM table_name ORDER BY columnname1, columnname2
SELECT column_name FROM table_name ORDER BY columnname1 DESC, columnname2 DESC
6. INSERT INTO语句
说明
INSERT INTO
语句用于向表格中插入新的行。
语法
INSERT INTO table_name VALUES (value1, value2, value3)
INSERT INTO table_name (column_name1, column_name2, column_name3) VALUES (value1, value2, value3)
7. UDPATE语句
说明
UDPATE
语句用于修改表中的数据。
语法
UPDATE table_name SET column_name = new_value WHERE condition(s)
UPDATE table_name SET column_name1 = new_value1, columnname2 = new_value2 WHERE condition(s)
8. DELETE
语句
说明
DELETE
语句用于删除表中的行。
语法
DELETE FROM table_name WHERE condition(s)
DELETE FROM table_name
DELETE * FROM table_name
高级语法
1. TOP子句
说明
TOP
子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP
子句是非常有用的。
注释: 并非所有的数据库系统都支持TOP
子句。
语法
SELECT TOP number|percent column_name(s)
FROM table_name
--Oracle
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number
2. LIKE操作符
说明
LIKE
操作符用于在WHERE子句中搜索列中的指定模式。
语法
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
-- 不包含
SELECT column_name(s)
FROM table_name
WHERE column_name NOT LIKE pattern
patter:
格式 | 说明 |
---|---|
N% | 以N开头 |
%N | 以N结尾 |
%N% | 中间包含N |
3. 通配符
说明
在搜索数据库中的数据时,SQL通配符可以替代一个或多个字符。
SQL通配符必须与LIKE
运算符一起使用。
在SQL中,可使用以下通配符:
通配符 | 说明 |
---|---|
% | 代替一个或多个字符 |
_ | 仅代替一个字符 |
[charlist] | 字符列表中的任何字符 |
[^charlist] | 不在字符列中的任何单一字符 |
[!charlist] | 不在字符列中的任何单一字符 |
语法
同LIKE
说明
SELECT * FROM table_name
WHERE column_name LIKE '[ALN]%' -- 从表中选取出列名以 "A" 或 "L" 或 "N" 开头的行
SELECT * FROM table_name
WHERE column_name LIKE '[!ALN]%' -- 从表中选取出列名不以 "A" 或 "L" 或 "N" 开头的行
4. IN操作符
说明
IN
操作符允许我们在WHERE
子句中规定多个值。
语法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
5. BETWEEN操作符
说明
操作符BETWEEN ... AND
会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
语法
--介于
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
--范围之外的人
SELECT column_name(s)
FROM table_name
WHERE column_name
NOT BETWEEN value1 AND value2
6. Alias(别名)
说明
通过使用SQL,可以为列名称和表名称指定别名(Alias)。
语法
--指定表别名
SELECT column_name(s)
FROM table_name
AS alias_name
--指定列别名
SELECT column_name AS alias_name
FROM table_name
7. JOIN
说明
用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。
语法
SELECT column_name(s)
FROM table_name1 as t1
INNER JOIN table_name2 as t2
ON t1.id = t2.id
ORDER BY column_name
例如:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
注:
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
8. INNER JOIN
说明
在表中存在至少一个匹配时,INNER JOIN
关键字返回行。
语法
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注:INNER JOIN
与JOIN
是相同的。
9. LEFT JOIN
说明
LEFT JOIN
关键字会从左表(table_name1)那里返回所有的行,即使在右表 (table_name2)中没有匹配的行。
语法
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
10. RIGHT JOIN
说明
RIGHT JOIN
关键字会右表(table_name2)那里返回所有的行,即使在左表 (table_name1)中没有匹配的行。
语法
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
11. FULL JOIN
说明
只要其中某个表存在匹配,FULL JOIN
关键字就会返回行。
语法
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
12.UNION和UNION ALL
说明
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION
内部的SELECT
语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条SELECT
语句中的列的顺序必须相同。
语法
-- UNION
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
-- UNION ALL
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
注: 默认地,UNION
操作符选取不同的值。如果允许重复的值,请使用UNION ALL
。
13. SELECT INTO
说明
SELECT INTO
语句从一个表中选取数据,然后把数据插入另一个表中。
SELECT INTO
语句常用于创建表的备份复件或者用于对记录进行存档。
语法
-- INSERT ALL
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
-- INSERT PATR
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename
SQL语法
1. CREATE DATABASE
说明
用于创建数据库。
语法
CREATE DATABASE database_name
2. CREATE TABLE
说明
用于创建数据库中的表。
语法
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
....
)
数据类型(data_type)说明:
数据类型(data_type) | 描述 |
---|---|
integer(size) int(size) smallint(size) tinyint(size) | 仅容纳整数。在括号内规定数字的最大位数。 |
decimal(size,d) numeric(size,d) | 容纳带有小数的数字。“size” 规定数字的最大位数。“d” 规定小数点右侧的最大位数。 |
char(size) | 容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。在括号中规定字符串的长度 |
varchar(size) | 容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。在括号中规定字符串的最大长度。 |
date(yyyymmdd) | 容纳日期。 |
3. Constraints
说明
约束用于限制加入表的数据的类型。
可以在创建表时规定约束(通过CREATE TABLE语句),或者在表创建之后也可以(通过ALTER TABLE语句)。
主要探讨以下几种约束:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
- DEFAULT
4. NOT NULL
说明
NOT NULL
约束强制列不接受NULL
值。
NOT NULL
约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
语法
-- NOT NULL
CREATE TABLE table_name
(
column_name1 data_type NOT NULL,
column_name2 data_type,
column_name3 data_type,
);
-- NOT NULL
CREATE TABLE table_name
(
column_name1 data_type NOT NULL,
column_name2 data_type,
column_name3 data_type,
);
-- UNIQUE
CREATE TABLE table_name (
column_name1 data_type NOT NULL UNIQUE,
column_name2 data_type,
column_name3 data_type,
);
5. UNIQUE
说明
UNIQUE
约束唯一标识数据库表中的每条记录。
UNIQUE
和PRIMARY KEY
约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY
拥有自动定义的UNIQUE
约束。
注:,每个表可以有多个UNIQUE
约束,但是每个表只能有一个PRIMARY KEY
约束。
语法
-- Create UNIQUE To new Table
CREATE TABLE table_name (
column_name1 data_type NOT NULL UNIQUE,
column_name2 data_type,
column_name3 data_type,
);
-- Create UNIQUES To new Table
CREATE TABLE table_name (
column_name1 data_type NOT NULL,
column_name2 data_type,
column_name3 data_type,
CONSTRAINT uc_name UNIQUE (column_name1,column_name2)
);
-- Create UNIQUE To old Table
ALTER TABLE table_name
ADD UNIQUE (columnname)
-- Create UNIQUES To old Table
ALTER TABLE table_name
ADD CONSTRAINT uc_name UNIQUE (columnname1,columnname2)
-- Drop UNIQUES To Table
ALTER TABLE table_name
DROP INDEX uc_name
ALTER TABLE table_name
DROP CONSTRAINT uc_name
6. PRIMARY KEY
说明
PRIMARY KEY
约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
语法
-- Create UNIQUE To new Table
CREATE TABLE table_name (
column_name1 data_type NOT NULL PRIMARY KEY,
column_name2 data_type,
column_name3 data_type,
);
-- Create UNIQUES To new Table
CREATE TABLE table_name (
column_name1 data_type NOT NULL,
column_name2 data_type,
column_name3 data_type,
CONSTRAINT pk_name PRIMARY KEY (column_name1,column_name2)
);
-- Create UNIQUE To old Table
ALTER TABLE table_name
ADD PRIMARY KEY (columnname)
-- Create UNIQUES To old Table
ALTER TABLE table_name
ADD CONSTRAINT pk_name PRIMARY KEY (columnname1,columnname2)
-- Drop UNIQUES To Table
ALTER TABLE table_name
DROP PRIMARY KEY
ALTER TABLE table_name
DROP CONSTRAINT pk_name
7. FOREIGN KEY
说明
一个表中的FOREIGN KEY
指向另一个表中的PRIMARY KEY
。
FOREIGN KEY
约束用于预防破坏表之间连接的动作。
FOREIGN KEY
约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
语法
-- Create UNIQUE To new Table
CREATE TABLE table_name (
column_name1 data_type NOT NULL,
column_name2 data_type,
column_name3 data_type,
FOREIGN KEY (column_name3) REFERENCES table_name1(columnname)
);
-- Create UNIQUES To new Table
CREATE TABLE table_name (
column_name1 data_type NOT NULL,
column_name2 data_type,
column_name3 data_type,
CONSTRAINT fk_name FOREIGN KEY (column_name1)
REFERENCES table_name1(columnname)
);
-- Create UNIQUE To old Table
ALTER TABLE table_name
ADD FOREIGN KEY (columnname)
REFERENCES table_name1(columnname1)
-- Create UNIQUES To old Table
ALTER TABLE table_name
ADD CONSTRAINT pk_name PRIMARY KEY (columnname1,columnname2)
-- Drop UNIQUES To Table
ALTER TABLE table_name
DROP FOREIGN KEY fk_name
ALTER TABLE table_name
DROP CONSTRAINT fk_name
8. CHECK
说明
CHECK
约束用于限制列中的值的范围。
如果对单个列定义CHECK
约束,那么该列只允许特定的值。
如果对一个表定义CHECK
约束,那么此约束会在特定的列中对值进行限制。
语法
-- Create
CREATE TABLE table_name (
column_name1 data_type NOT NULL CHECK (column_name1>0),
column_name2 data_type,
column_name3 data_type,
);
-- Create
CREATE TABLE table_name (
column_name1 data_type NOT NULL,
column_name2 data_type,
column_name3 data_type,
CONSTRAINT chk_name CHECK (column_name1>0 AND column_name2=value1)
);
-- Create To old Table
ALTER TABLE table_name
ADD CHECK (column_name1>0)
-- Create To old Table
ALTER TABLE table_name
ADD CONSTRAINT chk_name CHECK (column_name1>0 AND column_name2=value1)
-- Drop To Table
ALTER TABLE table_name
DROP CONSTRAINT chk_name
9. DEFAULT
说明
DEFAULT
约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。
语法
-- Create DEFAULT To new Table
CREATE TABLE table_name (
column_name1 data_type NOT NULL,
column_name2 data_type,
column_name3 data_type DEFAULT value
)
-- Create DEFAULT To old Table
ALTER TABLE table_name
ALTER column_name SET DEFAULT value
-- Drop DEFAULT To Table
ALTER TABLE table_name
ALTER column_name DROP DEFAULT
9. CREATE INDEX
说明
在表中创建索引,以便更加快速高效地查询数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
注: 更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
语法
CREATE INDEX index_name
ON table_name (column_name)
-- UNIQUE INDEX
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
-- 对列创建索引
CREATE INDEX column_index
ON table_name (column_name)
-- 对列创建降序索引
CREATE INDEX column_index
ON table_name (column_name DESC)
-- 对多列创建索引
CREATE INDEX column_index
ON table_name (column_name1, column_name2)
10. 撤销索引、表以及数据库
说明
通过使用DROP
语句,可以轻松地删除索引、表和数据库。
语法
-- Drop INDEX
ALTER TABLE table_name
DROP INDEX index_name
-- Drop TABLE
DROP TABLE table_name
-- Drop DATABASE
DROP DATABASE database_name
-- clear data
TRUNCATE TABLE table_name
11. ALTER TABLE
说明
用于在已有的表中添加、修改或删除列。
语法
-- add column
ALTER TABLE table_name
ADD column_name datatype
-- delete column
ALTER TABLE table_name
DROP COLUMN column_name
-- modify column
ALTER TABLE table_name
ALTER COLUMN column_name datatype
12. AUTO INCREMENT字段
说明
我们通常希望在每次插入新记录时,自动地创建主键字段的值。
我们可以在表中创建一个auto-increment
字段。
语法
-- CREATE
CREATE TABLE table_name
(
columnname1 data_type NOT NULL AUTO_INCREMENT,
column_name2 data_type NOT NULL,
PRIMARY KEY (columnname1)
)
-- 以100开始
ALTER TABLE table_name AUTO_INCREMENT=100
13. VIEW
说明
在SQL中,视图是基于SQL语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加SQL函数、WHERE以及JOIN语句,我们也可以提交数据,就像这些来自于某个单一的表。
注: 数据库的设计和结构不会受到视图中的函数、where或join语句的影响。
语法
-- CREATE
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
-- UPDATE
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
-- Drop
DROP VIEW view_name
14. NULL
说明
如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以NULL
值保存。
NULL
值的处理方式与其他值不同。
NULL
用作未知的或不适用的值的占位符。
注: 无法比较NULL
和0
;它们是不等价的。
语法
-- IS NULL
SELECT * FROM table_name
WHERE column_name IS NULL
-- IS NOT NULL
SELECT * FROM table_name
WHERE column_name IS NOT NULL
SQL函数
1. AVG
说明
AVG函数返回数值列的平均值。NULL值不包括在计算中。
语法
SELECT AVG(column_name) FROM table_name
2. COUNT
说明
返回匹配指定条件的行数。
语法
SELECT AVG(column_name) FROM table_name
2. AVG
说明
AVG函数返回数值列的平均值。NULL值不包括在计算中。
语法
-- 指定某列
SELECT COUNT(column_name) FROM table_name
-- 所有
SELECT COUNT(*) FROM table_name
-- 唯一值
SELECT COUNT(DISTINCT column_name) FROM table_name
3. FIRST
说明
FIRST()
函数返回指定的字段中第一个记录的值。
语法
SELECT FIRST(column_name) FROM table_name
3. FIRST
说明
FIRST()
函数返回指定的字段中第一个记录的值。
语法
SELECT FIRST(column_name) FROM table_name
4. LAST
说明
LAST()
函数返回指定的字段中最后一个记录的值。
语法
SELECT LAST(column_name) FROM table_name
5. MAX
说明
MAX()
函数返回指定的字段中最大的值。NULL值不包括在计算中。
语法
SELECT MAX(column_name) FROM table_name
6. MIN
说明
MIN()
函数返回指定的字段胡最小值。NULL值不包括在计算中。
语法
SELECT MIN(column_name) FROM table_name
7. SUM
说明
SUM()
函数返回数值列的总和。
语法
SELECT SUM(column_name) FROM table_name
8. GROUP BY
说明
GROUP BY
用于结合合计函数,根据一个或多个列对结果集进行分组。
语法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
9. HAVING
说明
在SQL中增加HAVING
子句原因是,WHERE关键字无法与合计函数一起使用。
语法
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
10. UCASE
说明
UCASE
函数把字段的值转换为大写。
语法
SELECT UCASE(column_name) FROM table_name
11. LCASE
说明
LCASE
函数把字段的值转换为小写。
语法
SELECT LCASE(column_name) FROM table_name
10. MID
说明
MID
函数用于从文本字段中提取字符。
语法
SELECT MID(column_name,start[,length]) FROM table_name
解释:
参数 | 描述 |
---|---|
column_name | 必需。要提取字符的字段。 |
start | 必需。规定开始位置(起始值是 1)。 |
length | 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。 |
11. LEN
说明
LEN
函数返回文本字段中值的长度。
语法
SELECT LEN(column_name) FROM table_name
12. ROUND
说明
ROUND
函数用于把数值字段舍入为指定的小数位数。
语法
SELECT ROUND(column_name,decimals) FROM table_name
13. NOW
说明
NOW
函数返回当前的日期和时间。
语法
SELECT NOW() FROM table_name
11. FORMAT
说明
FORMAT
函数用于对字段的显示进行格式化。
语法
SELECT FORMAT(column_name,format) FROM table_name