一些SQL题目

收集的一些SQL题目。。。

1.

+------------+------+
| time       | win  |
+------------+------+
| 2005-05-09 | 胜   |
| 2005-05-09 | 胜   |
| 2005-05-10 | 胜   |
| 2005-05-10 | 负   |
| 2005-05-10 | 负   |
| 2005-05-10 | 负   |
| 2005-05-09 | 负   |
| 2005-05-09 | 负   |
+------------+------+
输出为
+------------+------+------+
| time       | 胜   | 负   |
+------------+------+------+
| 2005-05-09 |    2 |    2 |
| 2005-05-10 |    1 |    3 |
+------------+------+------+
select time,
	sum(case when win='胜' then 1 else 0 end)'胜',
	sum(case when win='负' then 1 else 0 end)'负' 
from game 
group by time;

2.
+---------+------+---------+
| chinese | math | english |
+---------+------+---------+
|      85 |   67 |      76 |
|      58 |   79 |      62 |
|      66 |   60 |      96 |
+---------+------+---------+
输出为
+--------+------+------+
| 语文   | 数学 | 英语 |
+--------+------+------+
| 优秀   | 优秀 | 优秀 |
| 优秀   | 良好 | 优秀 |
| 及格   | 及格 | 及格 |
| 不及格 | 及格 | 及格 |
+--------+------+------+
约定:
>=85	优秀
>=75	良好
>=60	及格
<60	不及格
select 
	( case when chinese>=85 then '优秀' 
		   when chinese>=75 then '良好' 
		   when chinese>=60 then '及格' 
		   else '不及格' end
	) '语文',
	( case when math>=85 then '优秀' 
		   when math>=75 then '良好' 
		   when math>=60 then '及格' 
		   else '不及格' end
	) '数学',
	( case when english>=85 then '优秀' 
		   when english>=75 then '良好' 
		   when english>=60 then '及格' 
		   else '不及格' end
	) '英语'
from score;

3.

+----+-------+--------+-------+
| id | name  | course | score |
+----+-------+--------+-------+
|  1 | name1 |    101 |    90 |
|  2 | name1 |    102 |    68 |
|  3 | name1 |    103 |    92 |
|  4 | name2 |    101 |    45 |
|  5 | name2 |    102 |    97 |
|  6 | name2 |    103 |    66 |
|  7 | name3 |    101 |    65 |
|  8 | name3 |    102 |    77 |
|  9 | name3 |    103 |    91 |
+----+-------+--------+-------+
输出为
+-------+------+------+------+
| 姓名  | 语文 | 数学 | 英语 |
+-------+------+------+------+
| name1 |   90 |   68 |   92 |
| name2 |   45 |   97 |   66 |
| name3 |   65 |   77 |   91 |
+-------+------+------+------+
INSERT INTO  `test`.`testscore` (`name` ,`course` ,`score`)VALUES ('name1',  '101',  '90');
INSERT INTO  `test`.`testscore` (`name` ,`course` ,`score`)VALUES ('name1',  '102',  '68');
INSERT INTO  `test`.`testscore` (`name` ,`course` ,`score`)VALUES ('name1',  '103',  '92');
INSERT INTO  `test`.`testscore` (`name` ,`course` ,`score`)VALUES ('name2',  '101',  '45');
INSERT INTO  `test`.`testscore` (`name` ,`course` ,`score`)VALUES ('name2',  '102',  '97');
INSERT INTO  `test`.`testscore` (`name` ,`course` ,`score`)VALUES ('name2',  '103',  '66');
INSERT INTO  `test`.`testscore` (`name` ,`course` ,`score`)VALUES ('name3',  '101',  '65');
INSERT INTO  `test`.`testscore` (`name` ,`course` ,`score`)VALUES ('name3',  '102',  '77');
INSERT INTO  `test`.`testscore` (`name` ,`course` ,`score`)VALUES ('name3',  '103',  '91');
method 1:
SELECT name 姓名, 
	SUM( CASE course WHEN  '101' THEN score ELSE 0 END )  "语文", 
	SUM( CASE course WHEN  '102' THEN score ELSE 0 END )  "数学", 
	SUM( CASE course WHEN  '103' THEN score ELSE 0 END )  "英语"
FROM testscore
GROUP BY name;
method 2:
SELECT DISTINCT s.name 姓名, 
	( SELECT score FROM testscore WHERE name = s.name AND course =  '101' ) "语文", 
	( SELECT score FROM testscore WHERE name = s.name AND course =  '102' ) "数学", 
	( SELECT score FROM testscore WHERE name = s.name AND course =  '103' ) "英语"
FROM testscore s
ORDER BY s.name

4.什么是主键?什么是外键? 
        主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立 两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个 表格)里的一系列相连的字段。那么这些相连的字段就是外键。

5.什么叫视图?游标是什么? 

        视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。 
        游标是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集 的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

6.什么是事务?什么是锁? 

        事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。 
        在DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

7.触发器的作用? 

        触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

8.索引的作用?和它的优点缺点是什么? 

        索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中 书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列 或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。 

9.什么是内存泄漏? 

        一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free 或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值