数据库入门:select部分用法

https://www.nowcoder.com/practice
这个是牛客上的题目,其实之前也上过数据库的课程,但是太久没有用,就已经忘记了,所以写个博客,没啥技术含量,纯粹是方便自己看。
在这里插入图片描述

一、查询SELECT
格式:SELECT <列名> FROM <表名>

SQL1:查询所有列

SELECT *FROM user_profile(实际应用中一般很少这样写,因为需要讲*转化为各个列名,效率低。)
SELECT id,device_id,gender,age,university,province FROM user_profile

在这里插入图片描述

SQL2:去掉重复–DISTINCT放于列名前
加入要读取学校,去掉重复的学校
在这里插入图片描述

SELECT DISTINCT university FROM user_profile

SQL3:查询结果限制返回函数
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。
LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。
如果只给定一个参数,它表示返回最大的记录行数目。
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1。
初始记录行的偏移量是 0(而不是 1)。

例5.检索记录行 6-10
SELECT * FROM table LIMIT 5,5

例6.检索记录行 11-last
SELECT * FROM table LIMIT 10,-1

例7.检索前 5 个记录行
SELECT * FROM table LIMIT 5

结果为:输入前两个用户对应的device_id
在这里插入图片描述
1、第一种SQL是第二种SQL写法的简写,limit 0,2表示从第一条数据开始(0代表第一条),每页只显示2条数据

2、第三种写法是查询id值<=2的数据

select device_id from user_profile limit 2;
select device_id from user_profile limit 0,2;
select device_id from user_profile where id <=2;

SQL4: 查询之后将列重命名
格式:<列名>AS<新列名>
题目:现在你需要查看前2个用户明细设备ID数据,并将列名改为 ‘user_infos_example’,,请你从用户信息表取出相应结果。
在这里插入图片描述

SELECT device_id AS user_infos_example FROM user_profile limit 2

SQL5:条件查询
格式:SELECT <列名> FROM <表名> WHERE<条件>
题目:现在运营想要筛选出所有北京大学的学生进行用户调研,请你从用户信息表中取出满足条件的数据,结果返回设备id和学校。

select device_id,university FROM user_profile where university='北京大学'

SQL6:条件查询
题目:现在运营想要针对24岁以上的用户开展分析,请你取出满足条件的设备ID、性别、年龄、学校。
用户信息表:user_profile

SELECT device_id,gender,age,university FROM user_profile where age>24

SQL7:条件查询
题目:现在运营想要针对20岁及以上且23岁及以下的用户开展分析,请你取出满足条件的设备ID、性别、年龄。
用户信息表:user_profile
在这里插入图片描述

SELECT device_id,gender,age FROM user_profile where age>=20 and age<=23

SQL8:条件查询
题目:现在运营想要查看除复旦大学以外的所有用户明细,请你取出相应数据。
在这里插入图片描述

SELECT device_id,gender,age,university FROM user_profile where university != '复旦大学'

SQL9: 条件查询,用where过滤空数据
题目:现在运营想要对用户的年龄分布开展分析,在分析时想要剔除没有获取到年龄的用户,请你取出所有年龄值不为空的用户的设备ID,性别,年龄,学校的信息。
在这里插入图片描述

SELECT device_id,gender,age,university FROM user_profile where age is not NULL

SQL10、SQL11都是对where条件的限定,使用and /or

SQL12:where in 和 where not in
在这里插入图片描述

select device_id,gender,age,university,gpa from user_profile where university in('北京大学','复旦大学','山东大学')

其实用or也可以实现,只是这样麻烦一些

select device_id,gender,age,university,gpa from user_profile where university='北京大学' or university='复旦大学' or university='山东大学'

SQL13:字符匹配
一般形式为:

<列名> [NOT ] LIKE

匹配串中可包含如下四种通配符:
_:匹配任意一个字符;
%:匹配0个或多个字符;
[ ]:匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 );
[^ ]:不匹配[ ]中的任意一个字符。

例23.查询学生表中姓‘张’的学生的详细信息。

SELECT * FROM 学生表 WHERE 姓名 LIKE ‘张%’

例24.查询姓“张”且名字是3个字的学生姓名。

> SELECT * FROM 学生表 WHERE 姓名 LIKE '张__’

如果把姓名列的类型改为nchar(20),在SQL Server 2012中执行没有结果。原因是姓名列的类型是char(20),当姓名少于20个汉字时,系统在存储这些数据时自动在后边补空格,空格作为一个字符,也参加LIKE的比较。可以用rtrim()去掉右空格。

SELECT * FROM 学生表 WHERE rtrim(姓名) LIKE '张__'

例25.查询学生表中姓‘张’、姓‘李’和姓‘刘’的学生的情况。

SELECT * FROM 学生表 WHERE 姓名 LIKE '[张李刘]%’

例26.查询学生表表中名字的第2个字为“小”或“大”的学生的姓名和学号。

SELECT 姓名,学号 FROM 学生表 WHERE 姓名 LIKE '_[小大]%'

例27.查询学生表中所有不姓“刘”的学生。

 SELECT 姓名 FROM 学生 WHERE 姓名 NOT LIKE '刘%'

例28.从学生表表中查询学号的最后一位不是2、3、5的学生信息。

SELECT * FROM 学生表 WHERE 学号 LIKE '%[^235]'

在这里插入图片描述

SELECT device_id,age,university from user_profile where university like '北京%'

SQL14:聚合函数的使用
SQL提供的统计函数有:
COUNT(【Shift+8】):统计表中元组个数;
COUNT([DISTINCT] <列名>):统计本列列值个数;
SUM( <列名> ):计算列值总和;
AVG( <列名> ):计算列值平均值;
MAX( <列名> ):求列值最大值;
MIN( <列名> ): 求列值最小值。
上述函数中除COUNT(【Shift+8】)外,其他函数在计算过程中均忽略NULL值。

统计函数不能出现在WHERE子句中。
例如,查询成绩最高的学生的学号,如下写法是错误的:
SELECT 学号 FROM 成绩表
WHERE 成绩 = MAX(成绩)

例29.统计学生总人数。

SELECT COUNT(*) FROM 学生表

例30.统计选修了课程的学生的人数。

SELECT COUNT (DISTINCT 学号)
FROM 成绩表

例31.计算学号为“11214D24”的学生的考试总成绩之和。

SELECT SUM(成绩) FROM 成绩表
WHERE 学号 =11214D24 '

在这里插入图片描述

select MAX(gpa)AS gpa from user_profile where university='复旦大学'

SQL15:还是条件查询
在这里插入图片描述

SELECT COUNT(gender) as male_num,AVG(gpa) as avg_gpa from user_profile where gender='male' 

我这样写一点不严谨
看看大佬们怎么写的
表头重命名,用as语法
浮点数的平均值可能小数点位数很多,按照示例保存一位小数,用round函数

select   count(gender) as male_num,   round(avg(gpa), 1) as avg_gpa from user_profile where gender="male";

很基础的查询大概就这些了吧,如果有看到这的老表,不妨自己上牛客上去玩玩。(主要是我累了,后面不想写了,拜拜)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值