一、什么是SQL函数?为什么使用SQL函数可能会带来问题?
SQL语言中也包括内置函数(系统内置的通用函数)和自定义函数。
SQL函数一般在数据上执行,可以很方便转换和处理数据。
内置函数:
- 算术函数
- 字符串函数
- 日期函数
- 转换函数
只有很少的函数是被DBMS同时支持的。不同的平台下对大小写有不同的规范。
二、什么是SQL的聚集函数,如何利用它们汇总表的数据?
聚集函数:
函数 | 说明 |
---|---|
COUNT() | 总行数 |
MAX() | 最大值 |
MIN() | 最小值 |
SUM() | 求和 |
AVG | 平均值 |
SELECT COUNT(*) FROM heros WHERE hp_max > 6000
按照英雄的主要定位、次要定位进行分组,并且筛选分组中英雄数量大于5的组,最后按照分组中的英雄数量从高到低进行排序。
SELECT COUNT() as num, role_main, role_assist FROM heros GROUP BY role_main, role_assist HAVING COUNT() > 5 ORDER BY num DESC
SELECT查询中关键字顺序不能颠倒:
SELECT…FROM…WHERE…GROUP BY…HAVING…ORDER BY…LIMIT
三、子查询:子查询的种类有哪些,如何提高子查询的性能?
- 非关联子查询:子查询从数据表中查询了数据结果,如果只执行一次然后作为主查询的条件执行。
- 关联子查询:如果子查询需要执行多次,先从外部查询开始,每次都传入子查询进行查询,然后再将结果反馈给外部。
我们想要知道哪个球员的身高最高,最高身高是多少,就
可以采用子查询的方式:
SELECT player_name, height FROM player WHERE height = (SELECT max(height) FROM player)
我们想要看出场过的球员都有哪些,并且显示他们的姓名、球员 ID 和球队 ID:
SELECT player_id, team_id, player_name FROM player WHERE EXISTS (
SELECT *
FROM 出场表
WHERE player.player_id = 出场表.球员ID
);
四、常用的SQL标准有哪些,在SQL92中是如何使用连接的?
SQL是一种建立在关系型数据库基础上的语言。我们能使用SQL语言对各个数据表进行复杂查询,其核心就在于连接。
SQL有两个主要的标准:SQL92和SQL99。
笛卡尔积
SELECT * FROM player, team
等值连接
SELECT player.player_id, player.team_id, player.player_name, team.team_name
FROM player, team
WHERE player.team_id = team.team_id
非等值连接:如果连接多个表的条件不是等号,连接就是非等值查询
外连接(左连接、右连接)
左外连接就是左边的表是主表,需要显示全部行,右边的表是从表,(+)表示那个是从表
SELECT * FROM player, team WHERE player.team_id = team.team_id(+)
自连接
SELECT player_name, height
FROM player
WHERE height > (
SELECT height
FROM player
WHERE player_name = ‘布雷克·格里芬’
);