在工作之初,知道数据库是保存数据的地方,但是要去查询数据,只能通过表提供的筛选功能进行查询,想要一次查询、筛选多组数据内容,不知道怎么办,看到开发大佬们,运行几句语句,就能轻松的查到需要的数据,当场羡慕.jpg,所以也决定要学习好sql查询语句,能在测试造数,核实数据的时候,自己编写查询语句,给开发描述bug的时候,也不需要一大堆的中文堆砌,因为我发现,扔一串查询语句,远远比一堆中文清晰明了。
数据库表
一个数据库有一张或者多个表,每个表都有一个名字标识,每张表的数据都有一个唯一的标识。
学习的链接传送门:http://www.w3school.com.cn/sql/
快速了解数据表的关系
1.找开发问,自己拿小本本记着
2.自己查资料:开发表设计资料,数据库的资料以及产品需求
当然了,方法一应该是一个最笨的方法,但是估计最简单直接,所以我一开始是适用的方法一,但是随着自己的成长(这个说法有点假),了解了产品需求的同时,了解了数据库表的设计资料,再查看一下DDL(数据定义语言),不明白的地方再找开发大佬指导,提升了自身的本领不是?
查看DDL的方法:
找到对应的表,右键--查看对象信息即可,能查到对应表的每个字段表示什么意思
查询语句
1.select 从表中选取数据
select 列名称 from 表名称
select *from 表名称
*:选取所有列
2.select distinct 选择的数据去掉重复值
SELECT DISTINCT 列名称 from 表名称;
3.where语句:有条件的筛选数据
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
运算符:=,<>(不等于),>,<,>=,<=,between,like
like:一般跟着正则表达式做一些模糊查询,比如注册邮箱有@163,@126等,只需要查询@163的用户,就用到模糊查询
SELECT * FROM 表名称 WHERE mail LIKE '%@163.com';
4.and & or 语句:基于一个条件的记录进行过滤
SELECT * FROM 表名称 WHERE 列名称=1 AND 列名称=2;
SELECT * FROM 表名称 WHERE 列名称=1 OR 列名称=2;
SELECT * FROM 表名称 WHERE (列名称=1 OR 列名称=2) AND 列名称2=1 【结合使用】
5.order by 排序
order by 列名称:顺序排序
order by 列名称 desc : 倒序排列
insert into 语句
向表中插入新的行
INSERT INTO 表名称 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
update 语句
更新表中的数据
UPDATE 表名称 SET 列名称 = new WHERE 列名称 = old:更新某一列数据
UPDATE 表名称 SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson':更新一行中若干列
delete 语句
删除表的行
DELETE FROM 表名称 WHERE 列名称= 1 :删除“列名称=1”的行
DELETE FROM 表名称/DELETE * FROM 表名称:删除所有行
top 指令
规定返回的记录的数目,比如查询出来的数据有几千条数据,此时top可以规定只返回10条
SELECT TOP 10 * FROM 表名称 WHERE mail LIKE '%@163.com';
SELECT TOP 50 percent * FROM 表名称 WHERE mail LIKE '%@163.com'; 返回50%的数据
like 操作符
SELECT * FROM 表名称 WHERE City LIKE 'N%':筛选city以 【N开头】的行
SELECT * FROM 表名称 WHERE City LIKE '%g':筛选city以 【g结尾】的行
SELECT * FROM 表名称 WHERE City LIKE '%lon%':筛选city【包含lon】的行
SELECT * FROM 表名称 WHERE City not LIKE '%lon%':筛选city【不包含lon】的行
通配符:
WHERE City LIKE 'Ne%:筛选city【以Ne开头】的行
WHERE City LIKE '%lond%':筛选city【包含lond】的行
WHERE FirstName LIKE '_eorge':筛选名字【名字的第一个字符之后是 "eorge" 】的行
WHERE LastName LIKE 'C_r_er':筛选名字【以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er": 】的行
WHERE City LIKE '[ALN]%':选取居住的城市以 "A" 或 "L" 或 "N" 开头的人
WHERE City LIKE '[!ALN]%':选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人
_:只能匹配一个字符; [charlist]:匹配字符
in 操作符
在where中规定多个值
SELECT * FROM 表名称 WHERE allmeter in(1000,2000);
between 操作符
在where中筛选,介于两个值之间的数据
SELECT *from 表 WHERE id BETWEEN 11 AND 15; 筛选id在[11,15]之间的数据。
可以为文本,日期等,是否包含11,15 取决于各个数据库的差异
SELECT *from 表 WHERE id not BETWEEN 11 AND 15; 筛选id不在[11,15]之间的数据
AS 操作符
1.指定别名,连表查询的时候使得我们的语句更容易阅读
SELECT p.title,q.uid,q.prize FROM activity AS p,user AS q WHERE p.id=11;
筛选id=11的用户的uid,prize以及activity的title
2.给一个列指定别名
SELECT id as abc,create as qwe FROM activity;
从表activity中筛选id,create,并分别命名为abc,qwe
join操作符
根据两个或者多个表之间的关系,从这些表中查询数据,这个在多张表查询的时候,特别实用
数据库中表通过键将彼此联系起来,主键是一个列,在这个列中,每一行的值都是唯一的,在表中,每个主键都是唯一的。目的是,在不重复表的所有数据的情况,把表的数据,交叉捆绑在一起
筛选id=11的用户的uid,prize以及activity的title
方法一:连表查询
SELECT p.title,q.uid,q.prize FROM activity AS p,user AS q WHERE p.id=11;
方法二:join查询
SELECT *FROM activity as o JOIN user as b
ON o.id = b.id
WHERE o.challenge_id=28
left join ,right join ,full join
union 、union all 操作符
用于合并两个或者多个select语句的结果,注意是select语句必须拥有相同数量的列,列的数据类型也要相似,且顺序也要必须相同
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
列出中国+美国的人员,此时会去重处理,如果要全部显示,用union all
select into语句
创建表的备份复件,从表中选取数据,然后把数据插入到另一个表中,用于创建表的备份或者对记录进行存档。(这个暂时不敢尝试)
select *into person_backup from person
备份person表,备份表为person_backup
SELECT *INTO Persons IN 'Backup.mdb' FROM Persons
in:向另一张表Backup.mdb拷贝表
SELECT LastName,FirstName INTO Persons_backup FROM Persons
拷贝某些域
SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City='Beijing'
从 "Persons" 表中提取居住在 "Beijing" 的人的信息,创建了一个带有两个列的名为 "Persons_backup" 的表
group by
用于结合合计函数,根据一个或多个列对结果集进行分组。
SELECT uid,SUM(pay_amount) FROM user_info GROUP BY uid ORDER BY pay_amount DESC;
筛选每个用户支付总金额,并按照总金额进行倒序排列