【数据库】SQL语句
SQL 分为两个部分:数据操作语言(DML)和 数据定义语言(DDL)。
增删改查(CRUD)构成了 SQL 的 DML 部分。
- SELECT - 从数据库表中获取数据
- SELECT 列名 FROM 表名
- SELECT * FROM 表名
- SELECT COUNT(*) FROM 表名
- SELECT DISTINCT 列名 FROM 表名 (只显示结果不同的项)
- SELECT 列名 FROM 表名 WHERE 列 运算符 值
- 一些特别的操作符
操作符 描述 <> 不等于 BETWEEN 在某个范围内 LIKE 搜索某种模式 - LIKE 或 NOT LIKE 搜索的模式:
- % 表示一个或多个字符
- _ 表示一个字符
- [charlist] 表示字符列中的任何单一字符
- [^charlist] 或者 [!charlist] 表示不在字符列中的任何单一字符
- WHERE 列名 IS NULL
- 查找空字段不能用 =NULL !
- IN 允许在 WHERE 子句中规定多个值。
- WHERE 列名 IN (值1, 值2, ...)
这种方法比 WHERE 列名 = 值1 OR 列名 = 值2 效率高
- WHERE 列名 IN (值1, 值2, ...)
- 操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围,这些值可以是数值、文本或者日期。
- SELECT 列名 FROM 表名 WHERE 列名 (NOT) BETWEEN 值1 AND 值2
- 不同的数据库对 BETWEEN AND 操作符的区间处理有差异,有开区间、闭区间、左闭右开。
- AND 和 OR 可在 WHERE 子语句中把多个条件结合起来,可以使用圆括号来组成复杂的表达式。
- WHERE 列名=(SELECT ……)
- e.g. SELECT …… WHERE birthday=(SELECT MIN(birthday) FROM ……)
- 一些特别的操作符
- ORDER BY 语句用于根据指定的列对结果集进行排序(默认升序)。
- e.g. SELECT …… ORDER BY 列1 DESC, 列2 ASC
- 分组查询 GROUP BY
- GROUP BY 列名
- 根据分组字段的值将一个数据集划分成各个不同的小组,然后分别按照各个组别进行相应的查询。
SELECT * …… GROUP BY 列名 将只会返回各个分组的第一条数据,这种查询通常没什么意义。
因此常与 COUNT(),MAX() 等统计函数结合使用。
- 根据分组字段的值将一个数据集划分成各个不同的小组,然后分别按照各个组别进行相应的查询。
- HAVING 用于对统计函数进行条件判断
- 由于 “ SELECT COUNT(*) FROM 表名 WHERE COUNT(*) GROUP BY 列名 ” 语句中 WHERE 关键字无法与统计函数一起使用,该语句错误!
- e.g. GROUP BY 列名 HAVING 统计函数(列名2) 运算符 值
- GROUP BY 列名1, 列名2, ....
- 首先根据列名1的字段值分组,再在每个分组里根据列名2的字段值分组
- GROUP BY 列名
- 规定要返回的记录的数目
- SQL Server:
- SELECT TOP 3 列名 FROM 表名
- SELECT TOP 50 PERCENT 列名 FROM 表名
- MySQL:
- SELECT 列名 FROM 表名 LIMIT 3
- Oracle:
- SELECT 列名 FROM 表名 WHERE ROWNUM <= 3
- SQL Server:
- AS 为列名或表名指定别名(AS 可以省略,但建议加上以增加语句可读性)
- 表名的别名
- SELECT 列名 FROM 表名1 AS 别名1, 表名2 AS 别名2
- 表名的别名使查询程序的 WHERE 语句更易阅读和书写
- 列名的别名
- SELECT 列名1 AS 别名1, 列名2 AS 别名2 FROM 表名
- 表名的别名
- JOIN
- JOIN / INNER JOIN
- 内连接返回左右两表中匹配的行
- SELECT .... FROM 表1, 表2, 表3, .... WHERE 表1.列=表2.列 and 表2.列=表3.列 ....
这种传统跨表查询可替换为
SELECT .... FROM 表1 [INNER] JOIN 表2 ON 表1.列=表2.列 JOIN 表3 ON 表2.列=表3.列 .... WHERE ....
- LEFT JOIN
- 将左边的表设置为主表来连接右边的表,即使左表中的数据在右表中没有匹配,会自动使用 NULL 替代
- RIGHT JOIN
- 将右边的表设置为主表来连接左边的表,即使右表中的数据在左表中没有匹配,会自动使用 NULL 替代
- JOIN / INNER JOIN
- UPDATE - 更新数据库表中的数据
- UPDATE 表名 SET 列1 = 值1, 列2 = 值2 WHERE ……
- DELETE - 从数据库表中删除数据
- DELETE FROM 表名 WHERE ……
- DELETE FROM 表名 或 DELETE * FROM 表名
- INSERT INTO - 向数据库表中插入数据
- INSERT INTO 表名 VALUES (值1, 值2, ....) -- 不写列名必须写出所有字段值!
- INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ....)
- 插入另一个表中的多行数据:
INSERT INTO 表名1 (列1, 列2,...)
SELECT (列1', 列2', ...) FROM 表名2 WHERE 条件
DDL 部分使我们有能力创建或删除表格,也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
- CREATE DATABASE - 创建新数据库
- CREATE DATABASE 数据库名
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
CREATE TABLE 表名
(
列名1 数据类型,
列名2 数据类型,
列名3 数据类型,
....
)- 常用数据类型
数据类型 描述 integer(size)
int(size)
smallint(size)
tinyint(size)仅容纳整数。在括号内规定数字的最大位数。 decimal(size,d)
numeric(size,d)容纳带有小数的数字。
"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。char(size) 容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。
在括号中规定字符串的长度。varchar(size) 容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。
在括号中规定字符串的最大长度。date(yyyymmdd) 容纳日期。日期字段需要加引号,如 '1994-07-04'。 - CREATE TABLE 或 ALTER TABLE 时可以规定约束,用于限制加入表的数据的类型。
- NOT NULL
- 强制列不接受 NULL 值。如果不向字段添加值,就无法插入新记录或者更新记录。
- CREATE TABLE 表名
(
列名1 数据类型 NOT NULL,
....
)
- UNIQUE
- 唯一标识数据库表中的每条记录。
- 表创建时创建 UNIQUE 约束:
CREATE TABLE 表名
(
列名1 数据类型 UNIQUE,
....
) - 命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束:
CREATE TABLE 表名
(
列名1 数据类型,
列名2 数据类型,
....
CONSTRAINT 别名 UNIQUE (列名1, 列名2)
) - 对已创建的表中的列创建 UNIQUE 约束:
ALTER TABLE 表名
ADD UNIQUE (列名)ALTER TABLE 表名
ADD CONSTRAINT 别名 UNIQUE (列名1, 列名2) - 撤销 UNIQUE 约束
……
- PRIMARY KEY
- PRIMARY KEY 约束唯一标识数据库表中的每条记录,其拥有自动定义的 UNIQUE 约束。每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
主键列不能包含 NULL 值。
每个表必须有且只有一个主键。 - 表创建时创建 PRIMARY KEY 约束:
CREATE TABLE 表名
(
列名1 数据类型 NOT NULL PRIMARY KEY,
....
)
- PRIMARY KEY 约束唯一标识数据库表中的每条记录,其拥有自动定义的 UNIQUE 约束。每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
- FOREIGN KEY
- 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
- 表创建时创建 FOREIGN KEY 约束:
CREATE TABLE 表名
(
....
列名 数据类型 FOREIGN KEY REFERENCES 另一表名(其主键名),
....
)
- CHECK
- CHECK 约束用于限制列中的值的范围。
- 表创建时创建 CHECK 约束:
CREATE TABLE 表名
(
....
列名 int CHECK (列名 > 0),
....
)
- DEFAULT
- DEFAULT 约束用于向列中插入默认值。
- 表创建时创建 DEFAULT 约束:
CREATE TABLE 表名
(
....
列名 date DEFAULT GETDATE(),
....
)
- AUTO INCREMENT
- AUTO INCREMENT 允许在每次插入新记录时,自动地创建主键字段的值,可以规定起始值和递增值。
- NOT NULL
- ALTER TABLE - 变更数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
CREATE [UNIQUE] INDEX 索引名 ON 表名 (列名1 [DESC], 列名2)
UNIQUE 在表上创建一个唯一的索引,意味着两个行不能拥有相同的索引值。
如果希望以降序索引某个列中的值,可以在列名之后添加保留字 DESC。
- DROP INDEX - 删除索引
- TRUNCATE TABLE - 清空表
- TRUNCATE TABLE 用于删除表中的所有行,而不记录单个行删除操作。不同于 DELETE * ,TRUNCATE 会使自动递增的标识还原。
- TRUNCATE TABLE 表名
【数据库】SQL语句的更多相关文章
- 学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)
学生选课数据库SQL语句45道练习题: 一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...
- MySQL 数据库SQL语句——高阶版本2
MySQL 数据库SQL语句--高阶版本2 实验准备 数据库表配置: mysql -uroot -p show databases; create database train_ticket; use ...
- MySQL 数据库SQL语句——高阶版本1
MySQL 数据库SQL语句--高阶版本 实验准备,数据表配置 mysql -uroot -p show databases; create database train_ticket; use tr ...
- SQL Server数据库sql语句生成器(SqlDataToScript)的使用(sql server自增列(id)插入固定值)
SqlDataToScript是根据表数据进行生成 Insert Into语句,此工具还有一个好处是可以对自增列插入固定值,例如:自增的列id值为5,但是5这个行值已经删除,如果想存储Id自增列值为5 ...
- ORACLE数据库SQL语句的执行过程
SQL语句在数据库中处理过程是怎样的呢?执行顺序呢?在回答这个问题前,我们先来回顾一下:在ORACLE数据库系统架构下,SQL语句由用户进程产生,然后传到相对应的服务端进程,之后由服务器进程执行该SQ ...
- 数据库SQL语句练习题
一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...
- mySQL数据库Sql语句执行效率检查--Explain命令
mysql性能的检查和调优方法 Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的 ...
- 数据库—SQL语句
下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DEL ...
- 学生选课系统数据库SQL语句考试题
一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...
- 数据库 数据库SQL语句五
集合运算 union 并集(两个集合如果有重复部分,那么只显示一次重复部分) union all 并集(两个集合如果有重复部分,那么重复部分显示两次) intersect 交集 minus 差集 -- ...
随机推荐
- Sublime Text3 插件:DocBlockr与javascript注释规范
原:http://www.ithao123.cn/content-719950.html 1.引子 在写代码的时候,尤其是写脚本,最需要注释了.目前脚本.样式的注释格式都有一个已经成文的约定规范(这些 ...
- 关于jQ的Ajax操作
jQ的Ajax操作 什么是AJAX AJAX = 异步的javascript和XML(Asynchronous Javascript and XML) 它不是一门编程语言,而是利用JavaScript ...
- 基于 Python 和 Pandas 的数据分析(6) --- Joining and Merging
这一节我们将看一下如何通过 join 和 merge 来合并 dataframe. import pandas as pd df1 = pd.DataFrame({'HPI':[80,85,88,85 ...
- codeforces gym 100971 K Palindromization 思路
题目链接:http://codeforces.com/gym/100971/problem/K K. Palindromization time limit per test 2.0 s memory ...
- 批处理数据库(利用batch插入2w条数据)
public class Demo02Batch { /* * 批处理 */ public static void main(String[] args) { Connection conn=null ...
- 《剑指offer》第五十四题(二叉搜索树的第k个结点)
// 面试题54:二叉搜索树的第k个结点 // 题目:给定一棵二叉搜索树,请找出其中的第k大的结点. #include <iostream> #include "BinaryTr ...
- DP入门基本问题
个人对简单的dp问题的理解:找是否有重叠问题,明确递推关系,怎么推的(顺序千万不要搞错),找到状态方程,循环时注意边界条件和方程式是否严格成立. 转自:https://www.cnblogs.com/ ...
- Linux Ubuntu下用Android NDK 生成独立交叉编译链
本文主要介绍使用Android NDK生成独立交叉编译链,然后使用独立交叉编译链编译Android程序 下载NDK 下载与自己操作系统相吻合的版本 下载地址 解压到安装目录(如~/myndk): ta ...
- Unity中角度与弧度之间的相互转换
弧度数 = 角度数 * Mathf.Deg2Rad角度数 = 弧度数 * Mathf.Rad2Deg
- MySql常用函数全部汇总
MySQL数据库中提供了很丰富的函数.MySQL函数包括数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数.加密函数.格式化函数等.通过这些函数,可以简化用户的操作.例如,字符串连接函数 ...