【学习总结】SQL学习总结之SQL语法
【学习总结】SQL学习总结-总
================================================
二、SQL语法
SQL SELECT 语句
-
介绍
- SELECT 语句用于从数据库中选取数据。
- 结果被存储在一个结果表中,称为结果集。
-
SQL SELECT 语法
- 选取特定列组成新表返回:
SELECT column_name,column_name FROM table_name;
- 例如:
SELECT name,country FROM Websites;
- 例如:
- 选取所有列即原表返回:
SELECT * FROM table_name;
- 例如:
SELECT * FROM Websites;
- 例如:
- 选取特定列组成新表返回:
SQL SELECT DISTINCT 语句
-
介绍
- 在表中,一个列可能会包含多个重复值,有时仅希望列出不同(distinct)的值。
- DISTINCT 关键词用于返回唯一不同的值。
-
SQL SELECT DISTINCT 语法
- 默认去掉所选取列的重复值并返回新表:
SELECT DISTINCT column_name,column_name FROM table_name;
- 例如:
SELECT DISTINCT country FROM Websites;
- 默认去掉所选取列的重复值并返回新表:
SQL WHERE 子句
-
介绍
- WHERE 子句用于过滤记录,提取那些满足指定条件的记录。
-
SQL WHERE 语法
- 选取列并返回符合指定条件的新表:
SELECT column_name,column_name FROM table_name WHERE column_name operator value;
-- “列名+操作符+值”
- 例如:从 "Websites" 表中选取国家为 "CN" 的所有网站:
SELECT * FROM Websites WHERE country='CN';
- 例如:从 "Websites" 表中选取id为1的所有网站:
SELECT * FROM Websites WHERE id=1;
- 选取列并返回符合指定条件的新表:
-
文本字段 vs. 数值字段
- SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。-- ( 'CN' )
- 如果是数值字段,请不要使用引号。-- (id=1)
-
WHERE 子句中的运算符
SQL AND & OR 运算符
-
介绍
- AND & OR 运算符用于基于一个以上的条件对记录进行过滤。
- 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
- 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
-
AND 运算符语法
- 选取同时满足两个条件的列并返回新表:
SELECT * FROM tablename WHERE column_name operator value AND column_name operator value;
- 例如:从 "Websites" 表中选取国家为 "CN" 且alexa排名大于 "50" 的所有网站:
SELECT * FROM Websites WHERE country='CN' AND alexa > 50;
- 选取同时满足两个条件的列并返回新表:
-
OR 运算符语法
- 选取满足任一条件的列并返回新表:
SELECT * FROM Websites WHERE column_name operator value OR column_name operator value
- 例如:从 "Websites" 表中选取国家为 "USA" 或者 "CN" 的所有客户:
SELECT * FROM Websites WHERE country='USA' OR country='CN';
- 选取满足任一条件的列并返回新表:
-
AND & OR 结合
- 例如:从 "Websites" 表中选取 alexa 排名大于 "15" 且国家为 "CN" 或 "USA" 的所有网站:
SELECT * FROM Websites WHERE alexa>15 AND (country='CN' OR country='USA');
- 例如:从 "Websites" 表中选取 alexa 排名大于 "15" 且国家为 "CN" 或 "USA" 的所有网站:
SQL ORDER BY 关键字
-
介绍
- ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
- ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字(descent下降); ASC(ascent上升)。
-
SQL ORDER BY 语法
- 根据某列或某几列按照升序或降序排列后返回新表:
SELECT column_name, column_name FROM table_name ORDER BY column_name, column_name ASC | DESC
- 例如:从 "Websites" 表中选取所有网站,并按照 "alexa" 列排序:
SELECT * FROM Website ORDER BY alexa;
- 例如:从 "Websites" 表中选取所有网站,并按照 "alexa" 列降序排序:
SELECT * FROM Websites ORDER BY alexa DESC;
- 例如:从 "Websites" 表中选取所有网站,并按照 "country" 和 "alexa" 列排序:
SELECT * FROM Websites ORDER BY country, alexa;
- 根据某列或某几列按照升序或降序排列后返回新表:
-
注意
- ORDER BY 多列的时候,先按照第一个column name排序,在按照第二个column name排序;
- 1)先将country值这一列排序,同为CN的排前面,同属USA的排后面;
- 2)然后在同属CN的这些多行数据中,再根据alexa值的大小排列。
- 3)ORDER BY 排列时,不写明ASC DESC的时候,默认是ASC。
- 多列时,desc 或者 asc 只对它紧跟着的第一个列名有效,其他列不受影响,仍然是默认的升序。
- ORDER BY 多列的时候,先按照第一个column name排序,在按照第二个column name排序;
SQL INSERT INTO 语句
-
介绍
- INSERT INTO 语句用于向表中插入新记录。
-
SQL INSERT INTO 语法
- 无需指定要插入数据的列名,只需提供被插入的值:
INSERT INTO table_name VALUE (value1, value2, ....);
- 需要指定列名及被插入的值:
INSERT INTO table_name (column1, column2, ...) VALUE (value1, value2, ...);
- 例如:插入一个新行,但是只在 "name"、"url" 和 "country" 列插入数据(id 字段会自动更新):
NSERT INTO Websites (name, url, country) VALUES ('stackoverflow', 'http://stackoverflow.com/', 'IND');
- 无需指定要插入数据的列名,只需提供被插入的值:
-
注意:
- id字段会自动更新;
- 如果不是插入全部字段,则未指定数值的字段自动填充默认值,比如0.
- 没有指定要插入数据的列名的形式需要列出插入行的每一列数据;
- insert into select 和select into from 的区别:
- `insert into scorebak select * from socre where neza='neza' : 插入一行,要求表scorebak 必须存在;
- `select * into scorebak from score where neza='neza' : 也是插入一行,要求表scorebak 不存在;
SQL UPDATE 语句
-
介绍
- 更新表中已存在的记录。
-
SQL UPDATE 语法
- 根据set设置更新指定列或整个表的相关数值:
UPDATE table_name SET column1=value1, columa2=value2,.. WHERE some_column=some_value;
- 例如:把 "菜鸟教程" 的 alexa 排名更新为 5000,country 改为 USA。
UPDATE Websites SET alexa=’5000‘, country='USA' WHERE name='菜鸟教程';
- 根据set设置更新指定列或整个表的相关数值:
-
注:
- 执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。
- 如果上述例子中没有WHERE,则会把表中所有数据的alexa改为5000,country改为USA;
- 在 MySQL 中可以通过设置 sql_safe_updates 这个自带的参数来解决,当该参数开启的情况下,你必须在update 语句后携带 where 条件,否则就会报错。
set sql_safe_updates=1;
表示开启该参数
- 执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。
SQL DELETE 语句
-
介绍
- 删除表中的记录。
-
SQL DELETE 语法
- 从指定表中删除符合条件的行:
DELETE FROM table_name WHERE some_column=some_value;
- 例如:从 "Websites" 表中删除网站名为 "百度" 且国家为 CN 的网站的所在行:
DELETE FROM Websites WHERE name='百度' AND country='CN;
- 从指定表中删除符合条件的行:
-
注意
- 可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:
- 语句:
DELETE FROM table_name;
DELETE * FROM table_name;
-
SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE
- 相同点:drop、delete、truncate 都是删除表的内容。
- 不同点:
- delete:删除表的内容,表的结构还存在,不释放空间,可以回滚恢复;
- drop:删除表内容和结构,释放空间,没有备份表之前要慎用;
- truncate:删除表的内容,表的结构存在,可以释放空间,没有备份表之前要慎用;
- 执行速度:drop > truncate > delete
-
mysql安全设置
- mysql 中可以通过参数 sql_safe_updates 来限制 update/delete,防止全表更新或删除。