MySQL高级教程学习(1)

来自: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

MySQL高级教程学习(1)_第1张图片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高级教程学习(1)_第2张图片举例(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')

MySQL高级教程学习(1)_第3张图片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')

MySQL高级教程学习(1)_第4张图片
可以看到名字变了。
当然如此简单的定义字段的别名是没有太大实际意义的,字段别名更多的意义是解决字段名的重复,如一个表字段被查询两次或更多次时.

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

举例:
MySQL高级教程学习(1)_第5张图片

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也返回了,左右都返回):
MySQL高级教程学习(1)_第6张图片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

输出的结果,把两个表里的内容全部合并到了一列,并且以第一个表格命名。
MySQL高级教程学习(1)_第7张图片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。外键的举例:
MySQL高级教程学习(1)_第8张图片“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'##设置一个默认值

你可能感兴趣的:(SQL)