sql 高级

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()

猜你喜欢

转载自blog.csdn.net/LEIQINGQI/article/details/81536465