SQL语句之高级使用
1、select top
SELECT TOP 50 PERCENT * FROM Websites;
Oracle语法:
SELECT *
FROM Persons
WHERE ROWNUM <=5;
MySQL语法:
SELECT *
FROM Persons
LIMIT 5;
2、like
语法:
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
"%" 符号用于在模式的前后定义通配符(默认字母)
3、SQL通配符
1、通配符可用于替代字符串中的任何其他字符。
2、在 SQL 中,通配符与 SQL LIKE 操作符一起使用
例:
SELECT * FROM Websites
WHERE name REGEXP '^[GFs]';
4、in
IN 操作符允许您在 WHERE 子句中规定多个值。
语法:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
例:
SELECT * FROM Websites
WHERE name IN ('Google','菜鸟教程');
in和=对比:
IN
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
=
SELECT column_name(s)
FROM table_name
WHERE column_name=value1;
5、between
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
如需显示不在上面实例范围内的网站,使用 NOT BETWEEN:
SELECT * FROM Websites
WHERE alexa NOT BETWEEN 1 AND 20;
6、SQL别名
语法:
SELECT column_name AS alias_name
FROM table_me;
例:
SELECT name AS n, country AS c
FROM Websites; 把三个列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名: SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info
FROM Websites;
表的SQL别名语法:
SELECT column_name(s)
FROM table_name AS alias_name;
例:
SELECT w.name, w.url, a.count, a.date
FROM Websites AS w, access_log AS a
WHERE a.site_id=w.id and w.name="菜鸟教程";
7、join
作用:SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
(1)inner join(也可以缩写成join)——内联接
求交集,如果表中有至少一个匹配,则返回行
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
或
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
(2)left join——左联接
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
或
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
(3)right join——右联接
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
或
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
(4)full join(也叫作full outer join)——全联接
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
8、union
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
union all语法:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2; 注意:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
9、select into
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。
SELECT *
INTO newtable [IN externaldb]
FROM table1; 或: SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
下面的语句可以复制表结构和表数据:
CREATE TABLE 新表 AS SELECT * FROM 旧表;
或:
CREATE TABLE 新表 SELECT * FROM 旧表;
10、insert into select
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。 目标表中任何已存在的行都不会受影响。
语法:
INSERT INTO table2
SELECT * FROM table1;
----------------------------------
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
扩展:
create table table_name_new as select * from table_name_old
create table table_name_new as select * from table_name_old where 1=2;
或者:
create table table_name_new like table_name_old
如果两个表结构一样:
insert into table_name_new select * from table_name_old
如果两个表结构不一样:
insert into table_name_new(column1,column2...) select column1,column2... from table_name_old
11、创建数据库语句
CREATE DATABASE dbname;
12、创建表语句
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
13、SQL约束
CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
(1) not null
强制 "ID" 列、 "LastName" 列以及 "FirstName" 列不接受 NULL 值:
CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255) NOT NULL, Age int ); 在一个已创建的表的 "Age" 字段中添加 NOT NULL 约束如下所示:
ALTER TABLE Persons MODIFY Age int NOT NULL; 在一个已创建的表的 "Age" 字段中删除 NOT NULL 约束如下所示:
ALTER TABLE Persons MODIFY Age int NULL;
(2)unique
在 "Persons" 表创建时在 "P_Id" 列上创建 UNIQUE 约束:
MySQL语法: CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
) SQL Server / Oracle / MS Access语法: CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,使用下面的 SQL 语法:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)
当表已被创建时,如需在 "P_Id" 列创建 UNIQUE 约束,使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access: ALTER TABLE Persons
ADD UNIQUE (P_Id); 如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束: ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
如需撤销 UNIQUE 约束,使用下面的 SQL:
MySQL: ALTER TABLE Persons
DROP INDEX uc_PersonID SQL Server / Oracle / MS Access: ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
(3)primary key
CREATE TABLE 时的 SQL PRIMARY KEY 约束:
MySQL:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
) SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
ALTER TABLE 时的 SQL PRIMARY KEY 约束 MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id) -------------------------------------------------------------------------------------
如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
撤销 PRIMARY KEY 约束 MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY SQL Server / Oracle / MS Access: ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
(4)foreign key
一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。
(5)check约束

(6)default约束

14、创建索引
create index
在表上创建一个简单的索引。允许使用重复的值: CREATE INDEX index_name
ON table_name (column_name)
表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值。Creates a unique index on a table. Duplicate values are not allowed:
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
15、删除索引、表以及数据库
16、alter
17、auto increment字段

18、视图
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
(2)创建视图示例:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No 我们可以像这样查询上面这个视图: SELECT * FROM [Current Product List]
(3)更新视图
语法:
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
向 "Current Product List" 视图添加 "Category" 列。将通过下列 SQL 更新视图:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No
(4)删除视图
语法:
DROP VIEW view_name
19、DATE()函数
20、NULL值
21、NULL函数
22、通用数据类型

23、用于各种数据库的数据类型
SQL语句之高级使用的更多相关文章
- C#sql语句
SQL语句大全删除数据库 drop database databasename SQL语句大全备份 --- 创建备份数据的 device USE master EXEC sp_addumpdevice ...
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
ASP.NET MVC深入浅出(被替换) 一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...
- 浅谈c#的三个高级参数ref out 和Params C#中is与as的区别分析 “登陆”与“登录”有何区别 经典SQL语句大全(绝对的经典)
浅谈c#的三个高级参数ref out 和Params c#的三个高级参数ref out 和Params 前言:在我们学习c#基础的时候,我们会学习到c#的三个高级的参数,分别是out .ref 和 ...
- MySQL高级(进阶)SQL语句
MySQL高级(进阶)SQL语句 目录 MySQL高级(进阶)SQL语句 一.实例准备--制表 1. 表1(商店区域表) 2. 表2(商店销售表) 3. 表3(城市表) 4. 表4(total_sal ...
- 29.MySQL高级SQL语句
MySQL高级SQL语句 目录 MySQL高级SQL语句 创建两个表 SELECT DISTINCT WHERE AND OR IN BETWEEN 通配符 LIKE ORDER BY 函数 数学函数 ...
- 高级SQL语句
改变数据 insert record 插入一行 insert into foods (name, type_id) values ('Cinnamon Bobka', 1); 如果在insert语句中 ...
- 50句高级SQL语句
一个题目涉及到的50个Sql语句 --(下面表的结构以给出,自己在数据库中建立表.并且添加相应的数据,数据要全面些. 其中Student表中,SId为学生的ID) ------------------ ...
- Sql语法高级应用之一:使用sql语句如何实现不同的角色看到不同的数据
前言 在常见的管理系统中,通常都有这样的需求,管理员可以看到所有数据,部门可以看到本部门的数据,组长可以看到自己组的数据,组员只能看到自己相关的数据. 一般人的做法是,根据不同的角色通过if...el ...
- SQL语句中的select高级用法
#转载请联系 为了更好的了解下面的知识点,我们先创建两张表并插入数据. # 学生表 +----+-----------+------+--------+--------+--------+------ ...
随机推荐
- 论文笔记:(CVPR2019)Relation-Shape Convolutional Neural Network for Point Cloud Analysis
目录 摘要 一.引言 二.相关工作 基于视图和体素的方法 点云上的深度学习 相关性学习 三.形状意识表示学习 3.1关系-形状卷积 建模 经典CNN的局限性 变换:从关系中学习 通道提升映射 3.2性 ...
- Python小白的数学建模课-16.最短路径算法
最短路径问题是图论研究中的经典算法问题,用于计算图中一个顶点到另一个顶点的最短路径. 在图论中,最短路径长度与最短路径距离却是不同的概念和问题,经常会被混淆. 求最短路径长度的常用算法是 Dijkst ...
- HttpRunner3源码阅读:7.响应后处理 response.py
response 上一篇说的client.py来发送请求,这里就来看另一个response.py,该文件主要是完成测试断言方法 可用资料 jmespath[json数据取值处理]: https://g ...
- C++ 1//设计立方体类 //创建立方体的类 //设计属性和行为 //获取立方体的面积和体积 //分别利用(全局函数 和 成员函数)判断俩个立方体是否相等
1 //设计立方体类 2 //创建立方体的类 3 //设计属性和行为 4 //获取立方体的面积和体积 5 //分别利用(全局函数 和 成员函数)判断俩个立方体是否相等 6 #include <i ...
- Salesforce Integration 概览(五) Remote Call-In(远程操作 外部->salesforce)
本篇参考:https://resources.docs.salesforce.com/sfdc/pdf/integration_patterns_and_practices.pdf 本篇博客介绍 Re ...
- 2020年Android开发年终总结之如何挤进一线大厂?
前言 年底总是一个充满回顾与展望的日子,在2020这场哀鸿遍野的"寒冬"里尤为明显. 其实不管是公司.集体还是个人,都需要在这个时候找个机会停下来,思考一下这一年来的收获与成长.失 ...
- Java代码搭建Dubbo+ZooKeeper 的示例
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- Docker小白到实战之开篇概述
前言 "不对啊,在我这运行很正常啊",这句话小伙伴们在前几年应该听得很多:每次一到安装.部署时总有一堆问题,毕竟操作系统版本.软件环境.硬件资源.网络等因素在作怪,此时难免会导致开 ...
- 如何远程调试自定义开发的Flume应用
一.前言 Flume作为当下最流行的大数据采集组件之一.其本身拥有分布式/高可靠/高可用等优点,但相比较于Flink/Spark/Kafka等大数据组件,其对于本地调试的功能支持度并不高,如果我们没有 ...
- CD管理和检索软件比较
之前一直用EverCD+,考虑到鸡蛋不能放在一个篮子里,又找了几款功能类似的进行了比较,主要考察一下几个功能: 多个镜像:一个数据文件可以包含多个目录的镜像,便于数据管理和搜索: 目录更新:目录内容发 ...