top limit rownum
- select top 子句用于指定要返回的记录数量
- select top 子句在包含大型表中有用,
- 并不是素有的数据库都支持select top 子句,MySQL支持limit子句来选择有限数量的记录,而oracle 使用rownum
sql server
select top number percent column_name
from table_name
where condition;
mysql oracle
select column_name
from table_name
where condition
limit number;
like 运算符
like 操作符用在where 子句中搜索列中的指定模式
两个通配符和like 一起使用
- % 表示 0 个或1 个或多个字符
- _ 表示单个字符
选择客户名在第二位具有‘r’ 的所有客户
select * from Customers
where CustomerName like '_r%';
以a 开头并长度至少为3个字符的客户
select * from Customers
where CustomerName like 'a_%_%';
以a 开头并以o结尾的所有客户
select * from Customers
where ContactName like 'a%o';
不以‘a’开头的所有客户
select * from Customers
where CustomerName not like 'a%';
in
允许您在where 子句中指定多个值
是多个or 条件的简写
select column_name(s)
from table_name
where column_name in (value1, value2,.....);
select column_name
from table_name
where column_name in (select statement);d
选择位于 ‘Germany’ ‘France’ ‘Uk’的所有客户
select * from Custoemrs
where Country not in ('Germany','France','UK');
select * from Customers
where Country in(select Country Suppliers);
between
选择给定范围内的值,可以是数字、文本、日期
是包含的,包括开始和结束值
也可以使用not between
select * from Products
where (price between 10 and 20)
and not CategoryID in (1,2,3);
select * from products
where ProdectName between 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
order by ProductName;
join
把来自两个或多个表的行结合起来
- inner join : 如果表中至少一个匹配,则返回行
- left join: 即使右表中没有匹配,也从左表返回所有的行
- right join: 即使左表中没有匹配,也从右表中返回所有的行
- full join : 只要其中一个表中存在匹配,则返回行
inner join
选择两个表中具有匹配值的记录
select column_name
from table1
inner join table2 on table1.column_name = table2.column_name;
三张表的连接
select Orders.OrderID, Customers.CustomerName, ShippersName
from ((Orders
inner join Customers on Orders.CustomerID = Customers.CustomerID)
inner join Shippers on Orders.ShipperID = Shippers.ShipperID);
left join
返回左表中所有行,即使在右表中没有匹配,如果没有匹配,就出现null
语法:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
选择所有客户以及他们可能拥有的任何订单:
select Customers.CustomerName, Orders.OrderID
from Customers
left join Orders on
Customers.CustomerID = Orders.CustoemrID
order by Customers.CustomerName;
right join
返回右表的所有行,即使在左表上没有匹配,如果左表没有匹配,字段结果就是null
语法:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
full outer join
语法:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
自连接
是一种常规联接,但表本身是连接的。
来自同一个城市的客户
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;
union
组合两个或多个select 语句的结果集
- union 中的每个select 语句必须具有相同的列数
- 这些列也必须具有相似的数据类型
- 每个select 语句中的列也必须以相同的顺序排列
union all
union 运算符选择一个不同的值,如果允许重复值,请使用union all
使用union all 选择重复值
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;
select into
将信息从一个表中复制到另一个表中
SELECT *
INTO newtable [IN externaldb]
FROM table1;
SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
insert into select
从表中复制数据,将数据插入到现有的表中,目标表中所有现有行都不会受到影响
语法:
可以将所有列从一个表中复制到另一个已经存在的表中
INSERT INTO table2
SELECT * FROM table1;
或者可以把想要的列复制到另一个现有的表中
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
撤销索引、表、数据库
ALTER TABLE table_name DROP INDEX index_name
DROP TABLE table_name
DROP DATABASE database_name
只删除表中所有数据
truncate table table_name
create database
创建数据库
create database dbname;
create table
创建表
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
例子1
create table persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
alter table
在现有表中添加、删除或修改列
语法:
ALTER TABLE table_name
ADD column_name datatype
修改Person 表中 DateOfBirth 列的数据类型,改为year 数据类型
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year
删除Person 表中 DateOfBirth 列
alter table Persons
drop column DateOfBirth
auto increment
在记录插入表中时生成一个唯一的数字
通常希望在每次插入新记录自动创建主键字段的值
可以在表中创建一个自动增量(auto-increment) 字段
例子
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)
)
view 视图
视图是可视化的表
视图包含行和列,像真的表一样
语法:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
Date 函数
当我们处理日期时,最困难的任务可能是确保插入日期的格式与数据库中日期列中的格式相匹配
MySQL Date函数
- now()
- curdate()
- curtime()
- date()
- extract()
- date add()
- date sub()
- datediff()
- date format()