SQL回顾总结

整理自菜鸟教程

什么是SQL

SQL 指结构化查询语言,全称是 Structured Query Language,是用于访问和处理数据库的标准的计算机语言。

SQL能做什么

  • SQL 面向数据库执行查询
  • SQL 可从数据库取回数据
  • SQL 可在数据库中插入新的记录
  • SQL 可更新数据库中的数据
  • SQL 可从数据库删除记录
  • SQL 可创建新数据库
  • SQL 可在数据库中创建新表
  • SQL 可在数据库中创建存储过程
  • SQL 可在数据库中创建视图
  • SQL 可以设置表、存储过程和视图的权限

SQL语法汇总

  • 选择数据库
use database;
  • 设置使用的字符集
set name utf8;
  • 读取表中信息
SELECT * FROM table;
  • 返回唯一不同的值
SELECT DISTINCT column_name FROM table;
  • 提取满足要求的记录
SELECT column_name,
FROM table
WHERE column_name operator value;

WHERE子句中的运算符

WHERE子句中的运算符
  • 基于一个以上的条件对记录进行过滤
SELECT * FROM table
WHERE country='CN'
AND|OR alexa > 50;

如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录

  • 对结果集进行排序。
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC; #默认升序,DESC降序
  • 向表中插入新记录
INSERT INTO table_name
VALUES (value1,value2,value3,...);#无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);#指定列名及被插入的值
  • 更新表中的记录
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
  • 删除表中的记录
DELETE FROM table_name
WHERE some_column=some_value;
  • 规定要返回的记录的数目
SELECT TOP number|percent column_name(s)
FROM table_name;#SQL Server / MS Access 语法
SELECT column_name(s)
FROM table_name
LIMIT number;#MySQL 语法
  • LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;

SQL 通配符
通配符可用于替代字符串中的任何其他字符,常与LIKE一起使用

通配符

MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。

  • IN 操作符允许在 WHERE 子句中规定多个值
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
  • BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
  • 为表名称或列名称指定别名
SELECT column_name AS alias_name
FROM table_name;#列的 SQL 别名语法
SELECT column_name(s)
FROM table_name AS alias_name;#表的 SQL 别名语法
  • SQL JOIN 子句用于把来自两个或多个表的行结合起来(基于这些表之间的共同字段)

INNER 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;

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;

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;

FULL JOIN:只要其中一个表中存在匹配,则返回行

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
  • UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
    !注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
  • 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;
  • 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),
....
);
  • SQL 约束用于规定表中的数据规则。
    如果存在违反约束的数据行为,行为会被约束终止。
    约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)
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,
....
);

在 SQL 中,有如下约束:

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。
    DEFAULT - 规定没有给列赋值时的默认值。
  • CREATE INDEX 语句用于在表中创建索引。
CREATE INDEX index_name
ON table_name (column_name)
  • DROP INDEX 语句用于删除表中的索引
ALTER TABLE table_name DROP INDEX index_name;
  • DROP TABLE 语句用于删除表
DROP TABLE table_name;
  • DROP DATABASE 语句用于删除数据库
DROP DATABASE database_name;
  • TRUNCATE TABLE 语句用于只删除表内的数据,但并不删除表本身
TRUNCATE TABLE table_name;
  • ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
ALTER TABLE table_name
ADD column_name datatype;#在表中添加列
ALTER TABLE table_name
DROP COLUMN column_name;#删除表中的列
ALTER TABLE table_name
ALTER COLUMN column_name;#修改表中的列
  • AUTO INCREMENT 字段会在新记录插入表中时生成一个唯一的数字,与SQL约束用法相似,在创建表时添加
ALTER TABLE Persons AUTO_INCREMENT=100;#设定起始值
  • SQL CREATE VIEW 语句用于创建视图
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
  • SQL 更新视图
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
  • SQL 撤销视图
DROP VIEW view_name;

SQL日期

MySQL 中的内建日期函数

SQL Date 数据类型:


MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式:YYYY-MM-DD
  • DATETIME - 格式:YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS
  • YEAR - 格式:YYYY 或 YY

SQL 函数


SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。

  • AVG() - 返回平均值
  • COUNT() - 返回行数
  • FIRST() - 返回第一个记录的值
  • LAST() - 返回最后一个记录的值
  • MAX() - 返回最大值
  • MIN() - 返回最小值
  • SUM() - 返回总和

SQL Scalar 函数基于输入值,返回一个单一的值。

  • UCASE() - 将某个字段转换为大写
  • LCASE() - 将某个字段转换为小写
  • MID() - 从某个文本字段提取字符
  • LEN() - 返回某个文本字段的长度
  • ROUND() - 对某个数值字段进行指定小数位数的四舍五入
  • NOW() - 返回当前的系统日期和时间
  • FORMAT() - 格式化某个字段的显示方式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容