SQL刷题之高级操作符

239 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天

  • SQL11 高级操作符练习(1)

image.png

参考代码:

SELECT device_id,gender,age,university,gpa
FROM  user_profile
WHERE gpa > 3.5 AND gender = 'male'

条件限制这样写也是可以的: WHERE gpa >3.5 AND gender in ('male')

  • SQL12 高级操作符练习(2)

image.png

代码如下:

SELECT device_id,gender,age,university,gpa
FROM user_profile
WHERE university IN ('北京大学') OR gpa > 3.7
  • SQL13 Where in 和Not in

image.png

参考代码:

SELECT device_id,gender,age,university,gpa
FROM user_profile
WHERE university  IN ("北京大学","复旦大学","山东大学")
  • SQL14 操作符混合运用

image.png

参考代码如下:

SELECT device_id,gender,age,university,gpa
FROM user_profile
-- WHERE (gpa > 3.5 AND  university = "山东大学")  OR (gpa > 3.8 AND university = "复旦大学")
 WHERE gpa > 3.5 AND  university = "山东大学"  OR gpa > 3.8 AND university = "复旦大学"
SELECT device_id, gender, age, university,gpa from user_profile where gpa > 3.5 and university = '山东大学' UNION
SELECT device_id, gender, age, university,gpa from user_profile where gpa > 3.8 and university = '复旦大学' ORDER BY device_id ASC

发现不加括号也是可以通过的
使用union的时候的顺序问题,需要加上ORDER BY ... ASC 以将device_id 进行升序排列才不会报错

  • SQL15 查看学校名称中含北京的用户

image.png

参考代码如下:

SELECT device_id,age,university
FROM user_profile
WHERE university LIKE '北京%'

字符匹配

一般形式为:

列名 [NOT ] LIKE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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