SQL 是用于访问和处理数据库的标准的计算机语言。您需要在数据库上执行的大部分工作都由 SQL 语句完成。使用SQL语句可以向数据库进行查询、可以向数据库插入数据、可以更新数据库中的数据、可以删除数据库中的数据、可以向数据库新增数据数据库。

先准备一张测试用表,结构如下:

-- -建表语句,表test_account

DROP TABLE IF EXISTS `test_account`;

CREATE TABLE `test_account`  (

  `id` int(20) NOT NULL DEFAULT 0 AUTO_INCREMENT,

  `realname` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

  `username` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

  `age` int(10) NOT NULL,

  PRIMARY KEY (`id`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 822 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;

注:本文测试例子在Mysql上进行的测试。如在其他数据库中,建表语句和字段类型会有所变化。

一、数据库查询( SELECT 语句)

SELECT语句用于从数据库中查询数据。结果被存储在一个结果表中,称为结果集。

SELECT 语法

--表中选取字段列查询

SELECT 字段1,字段2  FROM 表名;

--表中选取所有列查询

SELECT * FROM 表名;

查询1,表中选取所有列查询:

SELECT * FROM  test_account

查询2,表中选取realname,username字段列查询:

SELECT realname,username FROM  test_account

二、条件查询(WHERE 语句)

使用SELECT * FROM <表名>可以查询到一张表的所有记录。但是,很多时候,我们并不希望获得所有记录,而是根据条件选择性地获取指定条件的记录。在一张表有数百万记录的情况下,获取所有记录不仅费时,还费内存和网络带宽。

SELECT语句可以通过WHERE条件来设定查询条件,查询结果是满足查询条件的记录。

WHERE 语法

SELECT 字段1,字段2
FROM 表名
WHERE 条件表达式;

下面的 SQL 语句从 " test_account " 表中选取姓名为 "陈兴木" 的所有用户:

SELECT * FROM  test_account where realname='陈兴木'

注:SQL 语句使用单引号来环绕文本值(大部分数据库系统也接受双引号),如果是数值字段,请不要使用引号。

WHERE中常用的运算符

--使用=判断相等

SELECT * FROM  test_account where realname='管理员'

--使用>判断大于

SELECT * FROM  test_account where age>18

--使用>=判断大于或相等

SELECT * FROM  test_account where age>=16

--使用<判断小于

SELECT * FROM  test_account where age<23

--使用<=判断小于或相等

SELECT * FROM  test_account where age<=15

--使用<>判断不相等,也可用!=

SELECT * FROM  test_account where age<>33

SELECT * FROM  test_account where age!=12

--使用LIKE判断相似,%表示任意字符,例如'ab%'将匹配'ab','abc','abcd'

SELECT * FROM  test_account where realname like '%兴%'

--使用BETWEEN查找在某个范围内的内容

SELECT * FROM  test_account where realname between '徐兴昌' and '许君'

SELECT * FROM  test_account where age between 20 and 26

--使用IN指定针对某个列的多个可能值

SELECT * FROM  test_account where realname in ('徐兴昌','许君','蔡晶')

SELECT * FROM  test_account where age in(20,30,18,15)

注:字符串比较根据ASCII码,中文字符比较根据数据库设置

AND & OR 运算符

AND & OR 运算符用于基于一个以上的条件对记录进行过滤。如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

---<条件1> AND <条件2>表达满足条件1并且满足条件2

SELECT * FROM  test_account where realname='陈兴木' and age>=16;

--<条件1> OR <条件2>,表示满足条件1或者满足条件2

SELECT * FROM  test_account where realname='陈兴木' or age>=16;

--<条件1> AND (<条件2> OR <条件3>),表示满足条件1并且满足(满足条件2或者满足条件3的结果)

SELECT * FROM  test_account where age>=16 and (realname='管理员' or realname='陈兴木');

三、查询结果排序(ORDER BY 关键字)

我们使用SELECT查询时,查询结果集通常是按照id排序的,也就是根据主键排序。这也是大部分数据库的做法。如果我们要根据其他条件排序怎么办?可以加上ORDER BY子句

ORDER BY 语法

SELECT 字段1,字段2
FROM 表名
ORDER BY 字段1,字段2 ASC|DESC;

注:默认的排序规则是ASC:“升序”,即从小到大。ASC可以省略。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

--下面的 SQL 语句从 "test_account" 表中查询所有数据,并按照 "realname" 列排序:

SELECT * FROM  test_account order by realname

--下面的 SQL 语句从 "test_account" 表中查询所有数据,并按照 "realname" 列降序排序:

SELECT * FROM  test_account order by realname desc

--下面的 SQL 语句从 "test_account" 表中查询所有数据,并按照 "realname" 和 "age" 列排序:

SELECT * FROM  test_account order by realname,age

--下面的 SQL 语句从 "test_account" 表中查询所有数据,并按照 "realname"降序排序和 "age" 列升序排序:

SELECT * FROM test_account ORDER BY realname DESC, age ASC

ORDER BY 多列的时候,先按照第一个column name排序,在按照第二个column name排序;

四、数据库插入数据(INSERT语句)

当我们需要向数据库表中插入一条新记录时,就必须使用INSERT语句。

INSERT INTO 语法

INSERT INTO 语句可以有两种编写形式。

--无需指定要插入数据的列名,只需提供被插入的值即可:

INSERT INTO 表名
VALUES (值1, 值2, 值3,...);

--指定列名及被插入的值:

INSERT INTO 表名 (字段1,字段2,字段3,...)
VALUES (值1, 值2, 值3,...);

 

-- 我们向test_account表插入一条新记录,先列举出需要插入的字段名称,然后在VALUES子句中依次写出对应字段的值:

INSERT INTO `test`.`test_account`(`id`, `realname`, `username`, `age`) VALUES (8, '张玲', 'zl', 24);

-- 我们向test_account表插入一条新记录,在VALUES子句中依次写出对应字段的值:

INSERT INTO `test`.`test_account`VALUES (9, '康有才', 'kyc', 16);

-- 当id 字段为自增时,我们向test_account表插入一条新记录,可以不用指定id的值:

INSERT INTO `test`.`test_account`( `realname`, `username`, `age`) VALUES ( '刘霞霞', 'lxx', 18);

-- 然后查询是否已插入成功

SELECT * FROM  test_account where id=8 or id=9 or realname='刘霞霞';

-- 测试完成清理数据

delete from test_account where id=8 or id=9 or realname='刘霞霞';

五、数据库更新数据(UPDATE语句)

如果要更新数据库表中的记录,我们使用UPDATE语句。UPDATE 语句用于更新表中已存在的记录。

UPDATE 语法

UPDATE 表名
SET 字段1=值1,字段2=值2,...
WHERE 条件表达式;
INSERT INTO `test`.`test_account`(`id`, `realname`, `username`, `age`) VALUES (10, '徐兴昌', 'xcx', 18);

INSERT INTO `test`.`test_account`(`id`, `realname`, `username`, `age`) VALUES (11, '陈阿呆', 'czw', 19);

-- 把表 "test_account" 中realname"徐兴昌"的age更新为 30。

update  test_account set age=30 where realname='徐兴昌' ;

-- 把表 "test_account" 中username='czw'的记录的realname更新为"徐兴昌",age更新为 26。

update  test_account set age=26 and realname='陈志伟' where username='czw' ;

-- 然后查询是否已更新成功

select * from test_account where realname='徐兴昌' or username='czw';

-- 测试完成清理数据

delete from test_account where realname='陈志伟' or realname='徐兴昌';

注:UPDATE语句的WHERE条件和SELECT语句的WHERE条件其实是一样的.如果WHERE条件没有匹配到任何记录,UPDATE语句不会报错,也不会有任何记录被更新。要特别小心的是,UPDATE语句可以没有WHERE条件,这时,整个表的所有记录都会被更新。

 

五、数据库删除数据(DELETE语句)

如果要删除数据库表中的记录,我们可以使用DELETE语句。DELETE 语句用于删除表中的行。

 

DELETE 语法

DELETE FROM 表名
WHERE 条件表达式;

 

-- 把表"test_account" 中realname="陈兴木"的记录删除。

delete from test_account where realname='陈兴木' ;

-- 把表"test_account" 中realname="许君"和age=16的记录删除。

delete from test_account where realname='许君' and age=16;

-- 删除表"test_account" 中id=8的记录

delete from test_account where id=8;

-- 然后查询是否已更新成功

select * from test_account where realname='陈兴木' or(username='许君' and age=16);

-- 把删除的数据恢复

INSERT INTO `test`.`test_account`(`id`, `realname`, `username`, `age`) VALUES (6, '许君', 'xj', 16);

INSERT INTO `test`.`test_account`(`id`, `realname`, `username`, `age`) VALUES (7, '陈兴木', 'mxc', 33);

INSERT INTO `test`.`test_account`(`id`, `realname`, `username`, `age`) VALUES (8, '陈兴木', 'mxc2', 18);

 

注:WHERE 表达式规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!您可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:

DELETE FROM 表名;

或

DELETE * FROM 表名;