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 表名;