SQL高级教程
一、top子句
top子句用于规定要返回的记录的数目
并非所有数据库系统都支持top子句
- # sqlserver
- SELECT TOP number|percent column_name(s) FROM table_name
- # mysql
- SELECT column_name(s) FROM table_name LIMIT number
- # oracle
- SELECT column_name(s) FROM table_name WHERE ROWNUM <= number
sqlserver top percent实例
- # 选取50%内容
- SELECT TOP 50 PERCENT * FROM persons
二、like操作符实例
- # 例1
- # 从 "Persons" 表中选取居住在以 "N" 开始的城市里的人:
- SELECT * FROM Persons WHERE City LIKE 'N%'
- # 从 "Persons" 表中选取居住在以 "g" 结尾的城市里的人:
- SELECT * FROM Persons WHERE City LIKE '%g'
- # 从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人:
- SELECT * FROM Persons WHERE City NOT LIKE '%lon%'
三、通配符
- # 从上面的 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人
- SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
- # 从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人
SELECT * FROM Persons WHERE City LIKE '[ALN]%'- # 从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人
SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
四、SQL IN操作符
- SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
五、 BETWEEN
- # BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围
# 操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。- SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
- # 显示范围之外的人
- SELECT * FROM Persons WHERE LastName
NOT
BETWEEN 'Adams' AND 'Carter'
六、 SQL Alias(别名)
- # 通过使用 SQL,可以为列名称和表名称指定别名(Alias)
- # 表的别名用法
SELECT column_name(s) FROM table_name AS alias_name
# 列的别名用法
SELECT column_name AS alias_name FROM table_name- # 假设我们有两个表分别是:"Persons" 和 "Product_Orders"。我们分别为它们指定别名 "p" 和 "po"。
SELECT PO.orderID, p.lastname, p.firstname FROM Persons AS p, Product_orders AS po WHERE p.LastName='Adams' AND p.FirstName='John'- # 使用一个列名别名
SELECT LastNameAS Family
, FirstNameAS Name
FROM Persons
七、 JOIN
- # join用于根据两个或多个表中的列之间的关系,从这些表中查询数据
# 数据库的表可通过键将彼此联系起来- # 可以通过引用两个表的方式来获取数据
SELECT persons.lastname, persons.firstname, orders.orderNO FROM persons,orders
WHERE persons.ID = orders.ID- # 使用关键词 JOIN 来从两个表中获取数据
SELECT persons.lastname, persons.firstname, orders.orderNO FROM persons
INNER JOIN orders ON persons.ID = orders.ID ORDERBY persons.lastnam
- # 不同的SQL JOIN
- 上面使用的INNER JOIN(内连接)
- 还有这些join类型
- JOIN: 如果表中至少一个匹配,则返回行
- LEFT_JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT_JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表存在匹配,就返回行
八、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
九、LEFT JOIN
- # left join 关键字会从左表那里返回所有的行,即使在右表中没有破匹配的行
- SELECT column_name(s)
- FROM table_name1
- LEFT JOIN table_name2
- ON table_name1.column_name=table_name2.column_name
十、RIGHT JOIN
- # RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
- SELECT column_name(s)
- FROM table_name1
- RIGHT JOIN table_name2
- ON table_name1.column_name=table_name2.column_name
十一、FULL JOIN
- # 只要其中某个表存在匹配, FULL JOIN关键字就会返回行
- SELECT column_name(s)
- FROM table_name1
- FULL JOIN table_name2
- ON table_name1.column_name=table_name2.column_name
十二、 UNION 和 UNION ALL 操作符
- # UNION 操作用于合并两个或多个select 语句的结果集
- # union
- # 默认的,union操作符选取不同的值,如果允许重复的值,应该使用union all
- SELECT column_name(s) FROM table_name1
- UNION
- SELECT column_name(s) FROM table_name2
- # union all
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
十三、select into
- # select into语句用于创建表的备份复件
- # 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
- # 下面的例子会制作 "Persons" 表的备份复件:
- SELECT *
- INTO Persons_backup
- FROM Persons
- # IN 子句可用于向另一个数据库中拷贝表:
- SELECT *
- INTO Persons IN 'Backup.mdb'
- FROM Persons
十四、CREATE DB
- # 创建数据库
- CREATE DATABASE dzp;
- # 查看数据库
- SHOW DATABASES;
- # 查看当前数据库
- select database();
- CREATE DATABASE IF NOT EXISTS t1;
- SHOW WARNNINGS;
十五、create table
- CREATE TABLE 表名称
- (
- 列名称1 数据类型,
- 列名称2 数据类型,
- 列名称3 数据类型,
- ....
- )
- # 例子
- CREATE TABLE Persons
- (
- Id_P int,
- LastName varchar(255),
- FirstName varchar(255),
- Address varchar(255),
- City varchar(255)
- )
十六、约束 constraints
- # 约束用于限制加入表的数据的类型
- # 可以在创建表的时候规定约束,通过CREATE TABLE语句创建
- # 或者在表创建之后也可以,通过ALTER TABLE语句修改
- # 有以下几种约束
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
- DEFAULT
十七、NOT NULL
- # NOT NULL约束强制列不接受null值,强制字段始终包含值
- # 这就意味着,如果不向字段添加值,就无法插入新记录或者是修改记录
- CREATE TABLE Persons
- (
- Id_P int NOT NULL,
- LastName varchar(255) NOT NULL,
- FirstName varchar(255),
- Address varchar(255),
- City varchar(255)
- )
十八、UNIQUE约束
- # UNIQUE 约束唯一表示数据库表中的每条记录
- # UNIQUE 和 PRIMARY KEY约束均为列或列集合提供了唯一性的保证
- # PRIMARY KEY拥有自动定义的UNIQUE约束
- # 注意!!每个表可以有多个UNIQUE约束,但是每个表只能有一个PRIMARY KEY约束
- # Mysql 创建UNIQUE约束
- CREATE TABLE Persons
- (
- Id_P int NOT NULL,
- LastName varchar(255) NOT NULL,
- FirstName varchar(255),
- Address varchar(255),
- City varchar(255),
- UNIQUE (Id_P)
- )
十九、primary key 主键约束
- # primary key约束唯一表示数据库表中的每条记录
- # 主键必须包含唯一的值
- # 主键列不能包含null值
- # 每个表都应该有一个主键,并且每个表只能有一个主键
- # mysql 创建表的时候创建主键
- CREATE TABLE Persons
- (
- Id_P int NOT NULL,
- LastName varchar(255) NOT NULL,
- FirstName varchar(255),
- Address varchar(255),
- City varchar(255),
- PRIMARY KEY (Id_P)
- )
- # mysql / SQL Server / Oracle / MS Access:
- CREATE TABLE Persons
- (
- Id_P int NOT NULL PRIMARY KEY,
- LastName varchar(255) NOT NULL,
- FirstName varchar(255),
- Address varchar(255),
- City varchar(255)
- )
- # 表已存在的时间添加主键,如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)
- ALTER TABLE Persons
ADD PRIMARY KEY (Id_P)
- # 撤销主键约束
- ALTER TABLE Persons
DROP PRIMARY KEY
二十、外键约束 FOREIGN KEY
- # 父表 persons 子表 orders
- # persons中的Id_P是父表的primary key
- # orders中的Id_P是字表中的foreign key
- # 外键约束用于预防破坏表之间连接的动作
- # 外键约束也能预防非法数据插入外键列,因为他必须指向父表中的值之一
- # 在创建子表的时候创建外键
- CREATE TABLE Orders
- (
- Id_O int NOT NULL,
- OrderNo int NOT NULL,
- Id_P int,
- PRIMARY KEY (Id_O),
- FOREIGN KEY (Id_P) REFERENCES persons(Id_P)
- }
- # 在子表已经存在的情况下创建外键约束
ALTER TABLE ORDERS ADD FOREIGN KEY(Id_P) REFERENCES persons (Id_P)- # 如果需要命名FOREIGN KEY约束,以及为多个列定义外键约束
ALTER TABLE orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)- # 撤销外键约束
ALTER TABLE orders DROP FOREIGN KEY fk_PerOrders
二十一、check 约束
- # CHECK 约束用于限制列中的值的范围。
mysql> CREATE TABLE persons(
-> Id_P int NOT NULL CHECK (Id_P>0),
-> Lastname VARCHAR(255) NOT NULL,
-> Firstname VARCHAR(255),
-> Address VARCHAR(255),
-> city VARCHAR(255)
-> );
Query OK, 0 rows affected (0.02 sec)- # 定义多个列CHECK约束
mysql> CREATE TABLE persons1(
-> Id_P int NOT NULL,
-> LastName varchar(255) NOT NULL,
-> City varchar(255),
-> CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
-> );
Query OK, 0 rows affected (0.03 sec)- # 已存在表,为Id_P创建CHECK约束
ALTER TABLE Persons ADD CHECK(Id_P>0)
# 为多个列创建CHECK约束
ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')- # 撤销CHECK约束
ALTER TABLE Persons DROP CHECK chk_Perso
二十二、DEFAULT约束
- # detault约束
- # 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()
- )
- # 如果在表已存在的情况下为 "City" 列创建 DEFAULT 约束
- ALTER TABLE Orders ALTER City SET DEFAULT 'Fuzhou'
- # 撤销default
- ALTER TABLE Orders ALTER City DROP DEFAULT
二十三、 CREATE INDEX 索引
- # create index语句用于在表中创建索引
- # 在不读取整个表的情况下,索引使数据库应用程序可以更快的查找数据
- # 可以在表中创建索引,一遍更加快速高效的查询数据
- # 用户无法看到索引,他们只能用来加速搜索/查询
- #更新一个包含索引的表需要比更新一个没有索引的表 要花更多的时间,这是因为索引本身也需要更新,因此理想的做法是:仅仅在常常被搜索的列(以及表)上面创建索引
- # 语法
- 在表上创建一个简单的索引,允许使用重复的值, column_name对顶需要索引的列
- CREATE INDEX index_name ON table_name (column_name)
- # 创建唯一索引
- CREATE UNIQUE INDEX index_name ON table_name (column_name)
- # 创建索引
- CREATE INDEX PersonIndex
- ON Person (LastName)
- # 降序索引某个列中的值,在列名称之后添加保留字 DESC
- CREATE INDEX PersonIndex
- ON Person (LastName DESC)
- # 索引不止一个列可以在括号中列出这些列的名称,用逗号隔开:
- CREATE INDEX PersonIndex
- ON Person (LastName, FirstName)
二十四、DROP语句
- # 通过使用 DROP 语句,可以轻松地删除索引、表和数据库。
- ALTER TABLE table_name DROP INDEX index_name
- DROP TABLE 表名称
- DROP DATABASE 数据库名称
- # 如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?
- # truncate table 表名称
- # 仅仅是删除表格中的数据
- TRUNCATE TABLE 表名称
二十五、ALTER语句
- # 添加
- ALTER TABLE table_name
- ADD column_name datatype
- # 删除
- ALTER TABLE table_name
- DROP column_name datatype
- # 在表 "Persons" 中添加一个名为 "Birthday" 的新列
- ALTER TABLE Persons ADD Birthday date
- # 改变 "Persons" 表中 "Birthday" 列的数据类型
- ALTER TABLE Persons ALTER CLOUMN Birthday year
- # 删除 "Person" 表中的 "Birthday" 列
- ALTER TABLE Persons DROP COLUMN Birthday
二十六、AUTO_INCREMENT
- # 我们通常希望在每次插入新记录时,自动地创建主键字段的值
- CREATE TABLE Persons
- (
- P_Id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
- LastName varchar(255) NOT NULL,
- FirstName varchar(255),
- Address varchar(255),
- City varchar(255)
- )
- MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。
- 默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。
- 要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:
- ALTER TABLE Persons AUTO_INCREMENT=100
二十七、视图 VIEW
- # 如何创建、更新和删除视图。
- # 视图是基于SQL语句结果集的可视化的表
- # 视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
- # 数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响
- CREATE VIEW view_name AS
- SELECT column_name(s)
- FROM table_name
- WHERE condition
- # 使用以下语法来更新视图
- SQL CREATE OR REPLACE VIEW Syntax
- CREATE OR REPLACE VIEW view_name AS
- SELECT column_name(s)
- FROM table_name
- WHERE condition
- # DROP VIEW 命令来删除视图
- SQL DROP VIEW Syntax
- DROP VIEW view_name
- DROP VIEW IF EXISTS view_name
二十八、mysql数据类型
- # mysql中有三种主要的类型:文本、数字、日期/时间
- # text类型
- CHAR(size)
- VARCHAR(size)
- TINYTEXT 存放最大长度为 255 个字符的字符串
- ENUM(x,y,z,etc.) 允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。(枚举)
- # Number类型
- TINYINT(size)
- SMALLINT(size)
- INT(size)
- BIGINT(size)
- FLOAT(size,d)
- DOUBLE(size,d)
- # date类型
- DATE()
- TIMESTAMP()
- TIME()
- YEAR()
SQL高级教程的更多相关文章
- SQL高级教程-TOP 子句
TOP 子句 TOP 子句用于规定要返回的记录的数目. 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. 注释:并非所有的数据库系统都支持 TOP 子句. SQL Server 的语法: S ...
- SQL基础教程(第2版)第8章 SQL高级处理:8-2 GROUPING运算符
第8章 SQL高级处理:8-2 GROUPING运算符 ■ GROUPING SETS——取得期望的积木● 只使用GROUP BY子句和聚合函数是无法同时得出小计和合计的.如果想要同时得到,可以使用G ...
- SQL基础教程(第2版)第8章 SQL高级处理:8-1 窗口函数
第8章 SQL高级处理:8-1 窗口函数 ● 窗口函数可以进行排序.生成序列号等一般的聚合函数无法实现的高级操作.● 理解PARTITION BY和ORDER BY这两个关键字的含义十分重要. ■什么 ...
- Siki_Unity_2-9_C#高级教程(未完)
Unity 2-9 C#高级教程 任务1:字符串和正则表达式任务1-1&1-2:字符串类string System.String类(string为别名) 注:string创建的字符串是不可变的 ...
- 这是一套Java菜鸟到大牛的学习路线之高级教程,由工作了10年的资深Java架构师整理。
这是一套Java菜鸟到大牛的学习路线之高级教程,由工作了10年的资深Java架构师整理. 01-java高级架构师设计-基础深入 J2SE深入讲解 Java多 ...
- Influx Sql系列教程九:query数据查询基本篇二
前面一篇介绍了influxdb中基本的查询操作,在结尾处提到了如果我们希望对查询的结果进行分组,排序,分页时,应该怎么操作,接下来我们看一下上面几个场景的支持 在开始本文之前,建议先阅读上篇博文: 1 ...
- 《SQL基础教程》+ 《SQL进阶教程》 学习笔记
写在前面:本文主要注重 SQL 的理论.主流覆盖的功能范围及其基本语法/用法.至于详细的 SQL 语法/用法,因为每家 DBMS 都有些许不同,我会在以后专门介绍某款DBMS(例如 PostgreSQ ...
- ios cocopods 安装使用及高级教程
CocoaPods简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm.随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的 ...
- 【读书笔记】.Net并行编程高级教程(二)-- 任务并行
前面一篇提到例子都是数据并行,但这并不是并行化的唯一形式,在.Net4之前,必须要创建多个线程或者线程池来利用多核技术.现在只需要使用新的Task实例就可以通过更简单的代码解决命令式任务并行问题. 1 ...
随机推荐
- flask 设置访问地址 和 访问端口
app.run() 四个参数 host:主机,可设置为本地或其他IP port:端口,是run()启动服务的时候指定的运行端口, debug:调试,如果需要进入调试模式,可以将这个选项设置成True ...
- 迭代硬阈值类算法总结||IHT/NIHT/CGIHT/HTP
迭代硬阈值类(IHT)算法总结 斜风细雨作小寒,淡烟疏柳媚晴滩.入淮清洛渐漫漫. 雪沫乳花浮午盏,蓼茸蒿笋试春盘.人间有味是清欢. ---- 苏轼 更多精彩内容请关注微信公众号 "优化与算法 ...
- Hive小文件处理
小文件是如何产生的: 动态分区插入数据的时候,会产生大量的小文件,从而导致map数量的暴增 数据源本身就包含有大量的小文件 reduce个数越多,生成的小文件也越多 小文件的危害: 从HIVE角度来看 ...
- Typora的日常使用方法
原文地址:https://www.jianshu.com/p/a6a6a22e9393 ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易 ...
- Linux 服务器远程管理
一.Linux 常用远程管理工具 点击下载 二.查看服务器 ip 地址命令 1.通过 ip addr 查看网卡 ip 地址 ip addr 2.通过 ifconfig 查看网卡 ip 地址 最小化安装 ...
- mtcnn论文学习
Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks 使用多任务级联卷积网络连接人脸检 ...
- shop++上传图片失败
如题上传shop++商城商品图片失败. 其主要原因是图片过大.本人使用测试需要在500KB以下才能成功 1.点击编辑缩小尺寸.这个缩小有限 2.用QQ截图另存为png
- Windows下MariaDB数据库安装图文教程
MariaDB是基于MySQL的开源数据库,兼容MySQL,现有的MySQL数据库可以迁移到MariaDB中使用 说明: MariaDB是基于MySQL的开源数据库,兼容MySQL,现有的MySQ ...
- 【DataBase】H2 DateBase的拓展使用
连接模式 支持以下连接模式: 嵌入模式(使用JDBC的本地连接) 服务器模式(使用JDBC或ODBC over TCP / IP进行远程连接) 混合模式(同时本地和远程连接) 嵌入模式 在嵌入模式下, ...
- 【NANO】引脚说明
http://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=489650&page=1