一、top子句

top子句用于规定要返回的记录的数目

并非所有数据库系统都支持top子句

  1. # sqlserver
  2. SELECT TOP number|percent column_name(s) FROM table_name
  3.  
  4. # mysql
  5. SELECT column_name(s) FROM table_name LIMIT number
  6.  
  7. # oracle
  8. SELECT column_name(s) FROM table_name WHERE ROWNUM <= number

sqlserver top percent实例

  1. # 选取50%内容
  2.  
  3. SELECT TOP 50 PERCENT * FROM persons

二、like操作符实例

  1. # 例1
  2. # 从 "Persons" 表中选取居住在以 "N" 开始的城市里的人:
  3. SELECT * FROM Persons WHERE City LIKE 'N%'
  4.  
  5. # 从 "Persons" 表中选取居住在以 "g" 结尾的城市里的人:
  6. SELECT * FROM Persons WHERE City LIKE '%g'
  7.  
  8. # 从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人:
  9. SELECT * FROM Persons WHERE City NOT LIKE '%lon%'

三、通配符

  1. # 从上面的 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人
  2. SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
  3.  
  4. # 从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人
    SELECT * FROM Persons WHERE City LIKE '[ALN]%'
  5.  
  6. # 从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人
    SELECT * FROM Persons WHERE City LIKE '[!ALN]%'

四、SQL IN操作符

  1. SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)

五、 BETWEEN

  1. # BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围
    # 操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
  2. SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
  3.  
  4. # 显示范围之外的人
  1. SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'

六、 SQL Alias(别名)

  1. # 通过使用 SQL,可以为列名称和表名称指定别名(Alias)
  2.  
  3. # 表的别名用法
    SELECT column_name(s) FROM table_name AS alias_name
    # 列的别名用法
    SELECT column_name AS alias_name FROM table_name
  4.  
  5. # 假设我们有两个表分别是:"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'
  6.  
  7. # 使用一个列名别名
    SELECT LastName AS Family, FirstName AS Name FROM Persons

七、 JOIN

  1. # join用于根据两个或多个表中的列之间的关系,从这些表中查询数据
    # 数据库的表可通过键将彼此联系起来
  2.  
  3. # 可以通过引用两个表的方式来获取数据
    SELECT persons.lastname, persons.firstname, orders.orderNO FROM persons,orders
    WHERE persons.ID = orders.ID
  4.  
  5. # 使用关键词 JOIN 来从两个表中获取数据
    SELECT persons.lastname, persons.firstname, orders.orderNO FROM persons
    INNER JOIN orders ON persons.ID = orders.ID ORDERBY persons.lastnam
  1. # 不同的SQL JOIN
  2. 上面使用的INNER JOIN(内连接)
  3.  
  4. 还有这些join类型
  5. JOIN: 如果表中至少一个匹配,则返回行
  6. LEFT_JOIN: 即使右表中没有匹配,也从左表返回所有的行
  7. RIGHT_JOIN: 即使左表中没有匹配,也从右表返回所有的行
  8. FULL JOIN: 只要其中一个表存在匹配,就返回行

八、INNER JOIN

  1. # 当表中至少存在一个匹配时, inner join关键字返回行, inner join和join是相同的
  2.  
  3. SELECT column_name(s)
  4. FROM table_name1
  5. INNER JOIN table_name2
  6. ON table_name1.column_name=table_name2.column_name

九、LEFT JOIN

  1. # left join 关键字会从左表那里返回所有的行,即使在右表中没有破匹配的行
  2.  
  3. SELECT column_name(s)
  4. FROM table_name1
  5. LEFT JOIN table_name2
  6. ON table_name1.column_name=table_name2.column_name

十、RIGHT JOIN

  1. # RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
  2.  
  3. SELECT column_name(s)
  4. FROM table_name1
  5. RIGHT JOIN table_name2
  6. ON table_name1.column_name=table_name2.column_name

十一、FULL JOIN

  1. # 只要其中某个表存在匹配, FULL JOIN关键字就会返回行
  2. SELECT column_name(s)
  3. FROM table_name1
  4. FULL JOIN table_name2
  5. ON table_name1.column_name=table_name2.column_name

十二、 UNION 和 UNION ALL 操作符

  1. # UNION 操作用于合并两个或多个select 语句的结果集
  2.  
  3. # union
  4. # 默认的,union操作符选取不同的值,如果允许重复的值,应该使用union all
  5. SELECT column_name(s) FROM table_name1
  6. UNION
  7. SELECT column_name(s) FROM table_name2
  8.  
  9. # union all
    SELECT column_name(s) FROM table_name1
    UNION ALL
    SELECT column_name(s) FROM table_name2

十三、select into

  1. # select into语句用于创建表的备份复件
  2. # select into从一个表中选取数据,然后插入另一个表
  3.  
  4. # 把所有列插入新表
  5. SELECT *
  6. INTO new_table_name [IN externaldatabase]
  7. FROM old_tablename
  8.  
  9. # 只把希望的列插入新表
  10. SELECT column_name(s)
  11. INTO new_table_name [IN externaldatabase]
  12. FROM old_tablename
  13.  
  14. # 下面的例子会制作 "Persons" 表的备份复件:
  15. SELECT *
  16. INTO Persons_backup
  17. FROM Persons
  18.  
  19. # IN 子句可用于向另一个数据库中拷贝表:
  20. SELECT *
  21. INTO Persons IN 'Backup.mdb'
  22. FROM Persons

十四、CREATE DB

  1. # 创建数据库
  2. CREATE DATABASE dzp;
  3.  
  4. # 查看数据库
  5. SHOW DATABASES;
  6.  
  7. # 查看当前数据库
  8. select database();
  9.  
  10. CREATE DATABASE IF NOT EXISTS t1;
  11. SHOW WARNNINGS;

十五、create table

  1. CREATE TABLE 表名称
  2. (
  3. 列名称1 数据类型,
  4. 列名称2 数据类型,
  5. 列名称3 数据类型,
  6. ....
  7. )
  8.  
  9. # 例子
  10. CREATE TABLE Persons
  11. (
  12. Id_P int,
  13. LastName varchar(255),
  14. FirstName varchar(255),
  15. Address varchar(255),
  16. City varchar(255)
  17. )

十六、约束 constraints

  1. # 约束用于限制加入表的数据的类型
  2. # 可以在创建表的时候规定约束,通过CREATE TABLE语句创建
  3. # 或者在表创建之后也可以,通过ALTER TABLE语句修改
  4.  
  5. # 有以下几种约束
  6. NOT NULL
  7. UNIQUE
  8. PRIMARY KEY
  9. FOREIGN KEY
  10. CHECK
  11. DEFAULT

十七、NOT NULL

  1. # NOT NULL约束强制列不接受null值,强制字段始终包含值
  2. # 这就意味着,如果不向字段添加值,就无法插入新记录或者是修改记录
  3.  
  4. CREATE TABLE Persons
  5. (
  6. Id_P int NOT NULL,
  7. LastName varchar(255) NOT NULL,
  8. FirstName varchar(255),
  9. Address varchar(255),
  10. City varchar(255)
  11. )

十八、UNIQUE约束

  1. # UNIQUE 约束唯一表示数据库表中的每条记录
  2. # UNIQUE 和 PRIMARY KEY约束均为列或列集合提供了唯一性的保证
  3. # PRIMARY KEY拥有自动定义的UNIQUE约束
  4. # 注意!!每个表可以有多个UNIQUE约束,但是每个表只能有一个PRIMARY KEY约束
  5.  
  6. # Mysql 创建UNIQUE约束
  7. CREATE TABLE Persons
  8. (
  9. Id_P int NOT NULL,
  10. LastName varchar(255) NOT NULL,
  11. FirstName varchar(255),
  12. Address varchar(255),
  13. City varchar(255),
  14. UNIQUE (Id_P)
  15. )

十九、primary key 主键约束

  1. # primary key约束唯一表示数据库表中的每条记录
  2. # 主键必须包含唯一的值
  3. # 主键列不能包含null值
  4. # 每个表都应该有一个主键,并且每个表只能有一个主键
  5.  
  6. # mysql 创建表的时候创建主键
  7. CREATE TABLE Persons
  8. (
  9. Id_P int NOT NULL,
  10. LastName varchar(255) NOT NULL,
  11. FirstName varchar(255),
  12. Address varchar(255),
  13. City varchar(255),
  14. PRIMARY KEY (Id_P)
  15. )
  16.  
  17. # mysql / SQL Server / Oracle / MS Access:
  18.  
  19. CREATE TABLE Persons
  20. (
  21. Id_P int NOT NULL PRIMARY KEY,
  22. LastName varchar(255) NOT NULL,
  23. FirstName varchar(255),
  24. Address varchar(255),
  25. City varchar(255)
  26. )
  27.  
  28. # 表已存在的时间添加主键,如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)
  1. ALTER TABLE Persons
  2. ADD PRIMARY KEY (Id_P)
  1. # 撤销主键约束
  1. ALTER TABLE Persons
  2. DROP PRIMARY KEY

二十、外键约束 FOREIGN KEY

  1. # 父表 persons 子表 orders
  2. # persons中的Id_P是父表的primary key
  3. # orders中的Id_P是字表中的foreign key
  4.  
  5. # 外键约束用于预防破坏表之间连接的动作
  6. # 外键约束也能预防非法数据插入外键列,因为他必须指向父表中的值之一
  7.  
  8. # 在创建子表的时候创建外键
  9.  
  10. CREATE TABLE Orders
  11. (
  12. Id_O int NOT NULL,
  13. OrderNo int NOT NULL,
  14. Id_P int,
  15. PRIMARY KEY (Id_O),
  16. FOREIGN KEY (Id_P) REFERENCES persons(Id_P)
  17. }
  18.  
  19. # 在子表已经存在的情况下创建外键约束
    ALTER TABLE ORDERS ADD FOREIGN KEY(Id_P) REFERENCES persons (Id_P)
  20.  
  21. # 如果需要命名FOREIGN KEY约束,以及为多个列定义外键约束
    ALTER TABLE orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
  22.  
  23. # 撤销外键约束
    ALTER TABLE orders DROP FOREIGN KEY fk_PerOrders

二十一、check 约束

  1. # 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)
  2.  
  3. # 定义多个列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)
  4.  
  5. # 已存在表,为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')
  6.  
  7. # 撤销CHECK约束
    ALTER TABLE Persons DROP CHECK chk_Perso

二十二、DEFAULT约束

  1. # detault约束
  2. # default约束用于向列中插入默认值
  3.  
  4. #
  5. CREATE TABLE Persons
  6. (
  7. Id_P int NOT NULL,
  8. LastName varchar(255) NOT NULL,
  9. FirstName varchar(255),
  10. Address varchar(255),
  11. City varchar(255) DEFAULT 'Sandnes'
  12. )
  13.  
  14. # 通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:
  15. CREATE TABLE Orders
  16. (
  17. Id_O int NOT NULL,
  18. OrderNo int NOT NULL,
  19. Id_P int,
  20. OrderDate date DEFAULT GETDATE()
  21. )
  22.  
  23. # 如果在表已存在的情况下为 "City" 列创建 DEFAULT 约束
  24.  
  25. ALTER TABLE Orders ALTER City SET DEFAULT 'Fuzhou'
  26.  
  27. # 撤销default
  28. ALTER TABLE Orders ALTER City DROP DEFAULT

二十三、 CREATE INDEX 索引

  1. # create index语句用于在表中创建索引
  2. # 在不读取整个表的情况下,索引使数据库应用程序可以更快的查找数据
  3.  
  4. # 可以在表中创建索引,一遍更加快速高效的查询数据
  5. # 用户无法看到索引,他们只能用来加速搜索/查询
  6.  
  7. #更新一个包含索引的表需要比更新一个没有索引的表 要花更多的时间,这是因为索引本身也需要更新,因此理想的做法是:仅仅在常常被搜索的列(以及表)上面创建索引
  8.  
  9. # 语法
  10. 在表上创建一个简单的索引,允许使用重复的值, column_name对顶需要索引的列
  11. CREATE INDEX index_name ON table_name (column_name)
  12.  
  13. # 创建唯一索引
  14. CREATE UNIQUE INDEX index_name ON table_name (column_name)
  15.  
  16. # 创建索引
  17. CREATE INDEX PersonIndex
  18. ON Person (LastName)
  19.  
  20. # 降序索引某个列中的值,在列名称之后添加保留字 DESC
  21. CREATE INDEX PersonIndex
  22. ON Person (LastName DESC)
  23.  
  24. # 索引不止一个列可以在括号中列出这些列的名称,用逗号隔开:
  25. CREATE INDEX PersonIndex
  26. ON Person (LastName, FirstName)

二十四、DROP语句

  1. # 通过使用 DROP 语句,可以轻松地删除索引、表和数据库。
  2.  
  3. ALTER TABLE table_name DROP INDEX index_name
  4.  
  5. DROP TABLE 表名称
  6.  
  7. DROP DATABASE 数据库名称
  8.  
  9. # 如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?
  10. # truncate table 表名称
  11. # 仅仅是删除表格中的数据
  12. TRUNCATE TABLE 表名称

二十五、ALTER语句

  1. # 添加
  2. ALTER TABLE table_name
  3. ADD column_name datatype
  4.  
  5. # 删除
  6. ALTER TABLE table_name
  7. DROP column_name datatype
  8.  
  9. # 在表 "Persons" 中添加一个名为 "Birthday" 的新列
  10. ALTER TABLE Persons ADD Birthday date
  11.  
  12. # 改变 "Persons" 表中 "Birthday" 列的数据类型
  13. ALTER TABLE Persons ALTER CLOUMN Birthday year
  14.  
  15. # 删除 "Person" 表中的 "Birthday" 列
  16. ALTER TABLE Persons DROP COLUMN Birthday

二十六、AUTO_INCREMENT

  1. # 我们通常希望在每次插入新记录时,自动地创建主键字段的值
  2.  
  3. CREATE TABLE Persons
  4. (
  5. P_Id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
  6. LastName varchar(255) NOT NULL,
  7. FirstName varchar(255),
  8. Address varchar(255),
  9. City varchar(255)
  10. )
  11.  
  12. MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。
  13. 默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1
  14. 要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:
  15.  
  16. ALTER TABLE Persons AUTO_INCREMENT=100

二十七、视图 VIEW

  1. # 如何创建、更新和删除视图。
  2. # 视图是基于SQL语句结果集的可视化的表
  3. # 视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
  4.  
  5. # 数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响
  6.  
  7. CREATE VIEW view_name AS
  8. SELECT column_name(s)
  9. FROM table_name
  10. WHERE condition
  11.  
  12. # 使用以下语法来更新视图
  13. SQL CREATE OR REPLACE VIEW Syntax
  14. CREATE OR REPLACE VIEW view_name AS
  15. SELECT column_name(s)
  16. FROM table_name
  17. WHERE condition
  18.  
  19. # DROP VIEW 命令来删除视图
  1. SQL DROP VIEW Syntax
  2. DROP VIEW view_name
  3.  
  4. DROP VIEW IF EXISTS view_name

二十八、mysql数据类型

  1. # mysql中有三种主要的类型:文本、数字、日期/时间
  2.  
  3. # text类型
  4. CHAR(size)
  5. VARCHAR(size)
  6. TINYTEXT 存放最大长度为 255 个字符的字符串
  7. ENUM(x,y,z,etc.) 允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。(枚举)
  8.  
  9. # Number类型
  10. TINYINT(size)
  11. SMALLINT(size)
  12. INT(size)
  13. BIGINT(size)
  14. FLOAT(size,d)
  15. DOUBLE(size,d)
  16.  
  17. # date类型
  18. DATE()
  19. TIMESTAMP()
  20. TIME()
  21. YEAR()

SQL高级教程的更多相关文章

  1. SQL高级教程-TOP 子句

    TOP 子句 TOP 子句用于规定要返回的记录的数目. 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. 注释:并非所有的数据库系统都支持 TOP 子句. SQL Server 的语法: S ...

  2. SQL基础教程(第2版)第8章 SQL高级处理:8-2 GROUPING运算符

    第8章 SQL高级处理:8-2 GROUPING运算符 ■ GROUPING SETS——取得期望的积木● 只使用GROUP BY子句和聚合函数是无法同时得出小计和合计的.如果想要同时得到,可以使用G ...

  3. SQL基础教程(第2版)第8章 SQL高级处理:8-1 窗口函数

    第8章 SQL高级处理:8-1 窗口函数 ● 窗口函数可以进行排序.生成序列号等一般的聚合函数无法实现的高级操作.● 理解PARTITION BY和ORDER BY这两个关键字的含义十分重要. ■什么 ...

  4. Siki_Unity_2-9_C#高级教程(未完)

    Unity 2-9 C#高级教程 任务1:字符串和正则表达式任务1-1&1-2:字符串类string System.String类(string为别名) 注:string创建的字符串是不可变的 ...

  5. 这是一套Java菜鸟到大牛的学习路线之高级教程,由工作了10年的资深Java架构师整理。

    这是一套Java菜鸟到大牛的学习路线之高级教程,由工作了10年的资深Java架构师整理.        01-java高级架构师设计-基础深入        J2SE深入讲解        Java多 ...

  6. Influx Sql系列教程九:query数据查询基本篇二

    前面一篇介绍了influxdb中基本的查询操作,在结尾处提到了如果我们希望对查询的结果进行分组,排序,分页时,应该怎么操作,接下来我们看一下上面几个场景的支持 在开始本文之前,建议先阅读上篇博文: 1 ...

  7. 《SQL基础教程》+ 《SQL进阶教程》 学习笔记

    写在前面:本文主要注重 SQL 的理论.主流覆盖的功能范围及其基本语法/用法.至于详细的 SQL 语法/用法,因为每家 DBMS 都有些许不同,我会在以后专门介绍某款DBMS(例如 PostgreSQ ...

  8. ios cocopods 安装使用及高级教程

    CocoaPods简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm.随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的 ...

  9. 【读书笔记】.Net并行编程高级教程(二)-- 任务并行

    前面一篇提到例子都是数据并行,但这并不是并行化的唯一形式,在.Net4之前,必须要创建多个线程或者线程池来利用多核技术.现在只需要使用新的Task实例就可以通过更简单的代码解决命令式任务并行问题. 1 ...

随机推荐

  1. flask 设置访问地址 和 访问端口

    app.run() 四个参数 host:主机,可设置为本地或其他IP port:端口,是run()启动服务的时候指定的运行端口, debug:调试,如果需要进入调试模式,可以将这个选项设置成True ...

  2. 迭代硬阈值类算法总结||IHT/NIHT/CGIHT/HTP

    迭代硬阈值类(IHT)算法总结 斜风细雨作小寒,淡烟疏柳媚晴滩.入淮清洛渐漫漫. 雪沫乳花浮午盏,蓼茸蒿笋试春盘.人间有味是清欢. ---- 苏轼 更多精彩内容请关注微信公众号 "优化与算法 ...

  3. Hive小文件处理

    小文件是如何产生的: 动态分区插入数据的时候,会产生大量的小文件,从而导致map数量的暴增 数据源本身就包含有大量的小文件 reduce个数越多,生成的小文件也越多 小文件的危害: 从HIVE角度来看 ...

  4. Typora的日常使用方法

    原文地址:https://www.jianshu.com/p/a6a6a22e9393 ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易 ...

  5. Linux 服务器远程管理

    一.Linux 常用远程管理工具 点击下载 二.查看服务器 ip 地址命令 1.通过 ip addr 查看网卡 ip 地址 ip addr 2.通过 ifconfig 查看网卡 ip 地址 最小化安装 ...

  6. mtcnn论文学习

    Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks 使用多任务级联卷积网络连接人脸检 ...

  7. shop++上传图片失败

    如题上传shop++商城商品图片失败. 其主要原因是图片过大.本人使用测试需要在500KB以下才能成功 1.点击编辑缩小尺寸.这个缩小有限 2.用QQ截图另存为png

  8. Windows下MariaDB数据库安装图文教程

    MariaDB是基于MySQL的开源数据库,兼容MySQL,现有的MySQL数据库可以迁移到MariaDB中使用   说明: MariaDB是基于MySQL的开源数据库,兼容MySQL,现有的MySQ ...

  9. 【DataBase】H2 DateBase的拓展使用

    连接模式 支持以下连接模式: 嵌入模式(使用JDBC的本地连接) 服务器模式(使用JDBC或ODBC over TCP / IP进行远程连接) 混合模式(同时本地和远程连接) 嵌入模式 在嵌入模式下, ...

  10. 【NANO】引脚说明

    http://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=489650&page=1