本文是个人学习笔记,内容主要涉及SQL中对数据表的基本操作,学习文档来自w3school:http://www.w3school.com.cn/sql/index.asp
SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。SQL 语句用于取回和更新数据库中的数据。SQL 对大小写不敏感!某些数据库系统要求在每条 SQL 命令的末端使用分号,有些则不必在每条 SQL 语句之后使用分号。分号是在数据库系统中分隔每条 SQL 语句的标准方法,加上它可以在对服务器的相同请求中执行一条以上的语句。
RDBMS 指的是关系型数据库管理系统。RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access。RDBMS 中的数据存储在被称为表(tables)的数据库对象中。表是相关的数据项的集合,它由列和行组成。
把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
SQL (结构化查询语言)是用于执行查询的语法,同时包含用于更新、插入和删除记录的语法。
SQL 的DML部分主要是针对数据表里的数据进行查询、更新、删除、插入等操作:
SELECT - 从数据库表中获取数据;UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据;INSERT INTO - 向数据库表中插入数据
SQL 的DDL部分主要是创建或删除数据库/表格,也可以定义索引(键),规定表间的链接、施加表间的约束:
CREATE DATABASE - 创建 新数据库;ALTER DATABASE - 修改 数据库
CREATE TABLE - 创建 新表;ALTER TABLE - 变更(改变) 表
DROP TABLE - 删除表;CREATE INDEX - 创建索引(搜索键);DROP INDEX - 删除索引
SELECT
SELECT 列名称 FROM 表名称
SELECT * FROM 表名称 # *号是选取所有列的快捷方式
e.g: SELECT huabei FROM af_huabei;
SELECT into_id,huabei FROM af_huabei;
SELECT * FROM af_huabei;
SELECT DISTINCT 列名称 FROM 表名称 #表中选定的列中包含重复值时,返回唯一不同的值
e.g: SELECT DISTINCT into_id FROM af_huabei;
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 #WHERE用于有条件地从表中选取数据
e.g: SELECT huabei FROM af_huabei WHERE huabei=500;
SELECT * FROM af_huabei WHERE huabei=500; #数字无引号
SELECT * FROM af_huabei WHERE into_id='ce5d583adce0477ea89d58936d8eb1b1'; #字符引号
AND和OR可在WHERE子语句中把两个或多个条件结合起来————AND运算符筛选条件是第一个条件和第二个条件都成立;OR运算符筛选条件是第一个条件和第二个条件至少一个成立;也可以把AND和OR结合起来(使用圆括号来组成复杂的表达式)
e.g: SELECT * FROM af_huabei WHERE huabei>500 AND huabei<1000;
SELECT * FROM af_huabei WHERE huabei>1500 OR huabei<1000;
SELECT * FROM af_huabei WHERE (huabei>1500 OR huabei<1000) AND into_id!='0b2e067deb4b494ab4f1601d1e214826';
SELECT ORDER BY(DESC/ASC)
表名称 ORDER BY 列名称 #根据指定的列对结果集进行排序(默认升序)
e.g: SELECT into_id,huabei_quote,count_of_orders FROM af_taobao_info
WHERE huabei_quote=70 ORDER BY count_of_orders;
表名称 ORDER BY 列名称1,列名称2
e.g: SELECT into_id,huabei_quote,count_of_orders FROM af_taobao_info
WHERE huabei_quote<80 AND huabei_quote>40 ORDER BY huabei_quote,count_of_orders;
表名称 ORDER BY 列名称 DESC ##根据指定的列对结果集进行排序(DESC降序)
e.g: SELECT into_id,huabei_quote,count_of_orders FROM af_taobao_info
WHERE huabei_quote<80 AND huabei_quote>40 ORDER BY huabei_quote DESC;
表名称 ORDER BY 列名称1 DESC,列名称2 ASC
e.g: SELECT into_id,huabei_quote,count_of_orders FROM af_taobao_info
WHERE huabei_quote<80 AND huabei_quote>40 ORDER BY huabei_quote DESC,count_of_orders ASC;
INSERT INTO
INSERT INTO 表名称 VALUES (值1, 值2,....)
e.g: INSERT INTO af_huabei VALUES('37cb63ef3abb46b48554bfcb8114aa1a', '877');
INSERT INTO table_name(列1, 列2,...) VALUES(值1, 值2,....)
INSERT IGNORE INTO table_name(column list) VALUES (VALUE list)
#使用INSERT INGORE语句,则会忽略导致错误的行,并将其余行插入到表中。
UPDATE
UPDATE 表名称 SET 列名称1=新值1,列名称2=新值2 WHERE 列名称=某值 #更新某一行中的若干列
e.g: UPDATE af_huabei SET huabei=-100 WHERE (into_id='37cb63ef3abb46b48554bfcb8114aa1a' AND huabei=-11);
UPDATE af_huabei SET huabei=-222,into_id='37cb63ef3abb46b48554bfcb8114AAAA' WHERE (into_id='37cb63ef3abb46b48554bfcb8114aa1a' AND huabei=-100);
注意:
#MySQL运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令
show variables like 'sql_safe%'; #查看开关状态。
set sql_safe_updates=0; #修改下数据库模式
DELETE
DELETE FROM 表名称 WHERE 列名称=值 #删除表中的行
e.g: DELETE FROM af_huabei WHERE (into_id='37cb63ef3abb46b48554bfcb8114AAAA' AND huabei=-222);
DELETE * FROM table_name #在不删除表的情况下删除所有的行