来自:http://www.w3school.com.cn/sql/sql_top.asp
1、TOP子句
TOP 子句用于规定要返回的记录的数目。
在SQL Server数据库中语法为:
SELECT TOP number|percent column_name(s) FROM table_name
但是并非所有的数据库系统都支持 TOP 子句,比如Oracle和MySQL,它们有等价的语法。
在Oracle数据库中语法为:
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number
在MySQL数据库中语法为:
SELECT column_name(s) FROM table_name LIMIT number
详细说一下在MySQL中的语法:
Limit子句可以被用于强制 SELECT 语句返回指定的记录数。Limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
//初始记录行的偏移量是 0(而不是 1):
mysql> SELECT * FROM table LIMIT 5,10; //检索记录行6-15
//如果只给定一个参数,它表示返回最大的记录行数目。换句话说,LIMIT n 等价于 LIMIT 0,n:
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行
举例:从city表中选取前五行
SELECT *
FROM city
LIMIT 5
2、LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式,基本语法为:
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
pattern有三种形式:
(1)%X:选出那一列中以X结尾的
(2)X%:选出那一列中以X开头的
(3)%X%:选出那一列中包含X的
举例:
SELECT NAME FROM city
where Name LIKE '%A'
SELECT NAME FROM city
where Name LIKE '%A%'
3、通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。SQL 通配符必须与 LIKE 运算符一起使用。常用的通配符如下所示。
举例(MySQL里面好像有些不同):
SELECT NAME FROM city
where Name LIKE '_A'##以A结尾,而且只有2位的
SELECT NAME FROM city
where Name RLIKE '^[A-D]'##以A-D开头的
SELECT NAME FROM city
where Name RLIKE '^[^A-D]'##不以A-D开头的
4、IN子句
IN 操作符允许我们在 WHERE 子句中规定多个值。
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
举例:
SELECT CountryCode,District FROM city
WHERE CountryCode IN ('DZA','AGO','AFG')
5、BETWEEN … AND
操作符 BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。SQL BETWEEN 语法:
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
举例:
SELECT CountryCode,Population FROM city
where Population BETWEEN 100000 and 200000
SELECT CountryCode,Population FROM city
WHERE CountryCode BETWEEN 'AFG' AND 'NLD'
###MySQL里面会把UB和LB都包含进去
6.SQL Alias(别名)
通过使用 SQL,可以为列名称和表名称指定别名(Alias),用法如下:
#表的 SQL Alias 语法
SELECT column_name(s)
FROM table_name
AS alias_name
#列的 SQL Alias 语法
SELECT column_name AS alias_name
FROM table_name
举例:
SELECT ci.CountryCode,co.code,co.region FROM city as ci,country as co
SELECT CountryCode AS CC from city
where CountryCode IN ('DZA','AGO')
可以看到名字变了。
当然如此简单的定义字段的别名是没有太大实际意义的,字段别名更多的意义是解决字段名的重复,如一个表字段被查询两次或更多次时.
7、SQL INNER JOIN
在表中存在至少一个匹配时,INNER JOIN 关键字返回行(注释:INNER JOIN 与 JOIN 是相同的)。主要语法如下:
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
##两个表,如果有相同的列,把那一列中重合的样本部分找出来并返回。
8、SQL LEFT JOIN 关键字
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右(table_name2) 中没有匹配的行(注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN)。左边的一定会全部返回(即使没有匹配的),右边的就不返回。LEFT JOIN 关键字语法如下:
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
举例:把country表中和countrylanguage表中code相同的样本找出来,从country表中选出code和continent列,从左边和countrylanguage表相连。
SELECT code,continent
from country
LEFT JOIN countrylanguage
on country.Code=countrylanguage.Code
SQL RIGHT JOIN 关键字和LEFT类似。右边的一定会全部返回(即使没有匹配的),左边的就不返回。
9、SQL FULL JOIN 关键字
只要其中某个表存在匹配,FULL JOIN 关键字就会返回行(在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。)。FULL JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
结果(把两边的Id_P都返回了,不管有没有匹配的上的,没有的话就空着:2和65也返回了,左右都返回):
10、UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SQL UNION 语法:
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
SQL UNION ALL 语法:
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
举例:
select name from city
UNION
select code from country
输出的结果,把两个表里的内容全部合并到了一列,并且以第一个表格命名。
11、SELECT INTO 语句
SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。SQL SELECT INTO 语法
##把所有的列插入新表:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
##只把希望的列插入新表:
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename
mysql里面没有into这个用法,可以用下面的语句替代。
CREATE TABLE tablename2 (SELECT * FROM tablename1);
INSERT INTO tablename2 SELECT * FROM tablename1
12、SQL CREATE DATABASE和TABLE 语句
CREATE DATABASE 用于创建数据库。
CREATE TABLE 用于创建数据表。
举例:
create database my_db
create table my_table
(ID_P INT,
Last_name VARCHAR(255),
First_name VARCHAR(255),
Address VARCHAR(255))
13、SQL 约束
约束用于限制加入表的数据的类型。可以在创建表时规定约束(通过 CREATE TABLE 语句),也可以在表创建之后(通过 ALTER TABLE 语句)。
(1)NOT NULL 约束
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。用法举例:
create database my_db
create table my_table
(ID_P INT NOT NULL,
Last_name VARCHAR(255),
First_name VARCHAR(255),
Address VARCHAR(255))
(2)PRIMARY KEY 约束(主键约束)
主键是表里一个或多个用于实现记录唯一性的字段,主键约束就是在创建表时制定某一列作为主键.
(3)UNIQUE约束
要求某个字段(某一列)的值在每条记录里面是唯一的,其实和主键约束很类似,只是主键让表有了一定的秩序,而且可以用于结合相互关联的表。
create table my_table
(ID_P INT NOT NULL PRIMARY KEY,
Last_name VARCHAR(255),
First_name VARCHAR(255),
Address VARCHAR(255) UNIQUE)
另一种表达
create table my_table
(ID_P INT NOT NULL PRIMARY KEY,
Last_name VARCHAR(255),
First_name VARCHAR(255),
Address VARCHAR(255) UNIQUE)
PRIMARY KEY(ID_P)
(4)外键约束
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。外键的举例:
“Orders” 中的 “Id_P” 列指向 “Persons” 表中的 “Id_P” 列。
"Persons" 表中的 “Id_P” 列是 “Persons” 表中的 PRIMARY KEY。
“Orders” 表中的 “Id_P” 列是 “Orders” 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的动作。FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
create table时的外键约束:
CREATE TABLE ORDERS
(Id_O INT PRIMARY KEY,
OrderNo INT,
Id_P INT,
FOREIGN KEY (Id_P) REFERENCES person(Id_P)
##Id_P作为ORDERS的外键和person的主键,把两个表连接在一起
)
alter table时的外键约束:
##在 "Orders" 表已存在的情况下为 "Id_P" 列创建 FOREIGN KEY 约束
ALTER TABLE Orders
ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
##命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders##随意取的约束名
FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
撤销 FOREIGN KEY 约束
如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders##和上面一条是对应的
14、SQL CHECK 约束
如果对单个列定义 CHECK 约束:
CREATE table person1
(Id_P int PRIMARY KEY,
Lastname VARCHAR(255),
Firstname VARCHAR(255),
City VARCHAR(255),
CHECK (Id_P>0))
给约束命名,同时对多个列施加约束
CREATE table person2
(Id_P int PRIMARY KEY,
Lastname VARCHAR(255),
Firstname VARCHAR(255),
City VARCHAR(255),
CONSTRAINT Valueconstraint CHECK (Id_P>0 AND City='C'))
ALTER和撤销的做法和上面类似
ALTER TABLE Persons
ADD CHECK (Id_P>0)
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
ALTER TABLE Persons
DROP CHECK chk_Person
15、SQL DEFAULT 约束
DEFAULT 约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。如果规定了其他值,还是会按其他值来。
CREATE TABLE Persons
(Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes')
通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:
CREATE TABLE Orders
(Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE())
ALTER的用法
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'##添加默认值
ALTER TABLE Persons
ALTER City DROP DEFAULT##删除默认值
举例:
ALTER table person
ALTER Lastname SET DEFAULT 'AA'##设置一个默认值