一道百度sql面试题:
1.一个人有姓名,电话和地址有多个,怎么样设计数据库?还有就是当有用户自定义一些字段的时候,应该怎么样来设计表。
答案:3个表,列变为行存,xml
2.查询出有两个地址的人的信息(用到的知识有having和count)
select * from student
where id in ( select stu_id from score group by stu_id having count(c_name)=2 )
SELECT语句定义 view plain copy
SELECT子句是必选的,其它子句如WHERE子句、GROUP BY子句等是可选的。一个SELECT语句中,子句的顺序是固定的。例如GROUP BY子句不会位于WHERE子句的前面。
SELECT语句执行顺序
SELECT语句中子句的执行顺序与SELECT语句中子句的输入顺序是不一样的,所以并不是从SELECT子句开始执行的,而是按照下面的顺序执行:
开始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->最终结果
每个子句执行后都会产生一个中间结果,供接下来的子句使用,如果不存在某个子句,就跳过
对比了一下,mysql和sql执行顺序基本是一样的, 标准顺序的 SQL 语句为:
在上面的示例中 SQL 语句的执行顺序如下:
(1). 首先执行 FROM 子句, 从 tb_Grade 表组装数据源的数据
(2). 执行 WHERE 子句, 筛选 tb_Grade 表中所有数据不为 NULL 的数据
(3). 执行 GROUP BY 子句, 把 tb_Grade 表按 "学生姓名" 列进行分组(注:这一步开始才可以使用select中的别名,他返回的是一个游标,而不是一个表,所以在where中不可以使用select中的别名,而having却可以使用,感谢网友 zyt1369 提出这个问题)
(4). 计算 max() 聚集函数, 按 "总成绩" 求出总成绩中最大的一些数值
(5). 执行 HAVING 子句, 筛选课程的总成绩大于 600 分的.
(7). 执行 ORDER BY 子句, 把最后的结果按 "Max 成绩" 进行排序.
MySQL查询语句练习题,测试基本够用了
(2013-01-31 09:37:09)Sutdent表的定义
字段名 | 字段描述 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
Id | 学号 | INT(10) | 是 | 否 | 是 | 是 | 是 |
Name | 姓名 | VARCHAR(20) | 否 | 否 | 是 | 否 | 否 |
Sex | 性别 | VARCHAR(4) | 否 | 否 | 否 | 否 | 否 |
Birth | 出生年份 | YEAR | 否 | 否 | 否 | 否 | 否 |
Department | 院系 | VARCHAR(20) | 否 | 否 | 是 | 否 | 否 |
Address | 家庭住址 | VARCHAR(50) | 否 | 否 | 否 | 否 | 否 |
Score表的定义
字段名 | 字段描述 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
Id | 编号 | INT(10) | 是 | 否 | 是 | 是 | 是 |
Stu_id | 学号 | INT(10) | 否 | 否 | 是 | 否 | 否 |
C_name | 课程名 | VARCHAR(20) | 否 | 否 | 否 | 否 | 否 |
Grade | 分数 | INT(10) | 否 | 否 | 否 | 否 | 否 |
1.创建student和score表
CREATE
id
name
sex
birth
department
address
);
创建score表。SQL代码如下:
CREATE
id
stu_id
c_name
grade
);
2.为student表和score表增加记录
向student表插入记录的INSERT语句如下:
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
向score表插入记录的INSERT语句如下:
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
3.查询student表的所有记录
mysql>
+-----+--------+------+-------+------------+--------------+
|
+-----+--------+------+-------+------------+--------------+
|
|
|
|
|
|
+-----+--------+------+-------+------------+--------------+
4.查询student表的第2条到4条记录
mysql>
+-----+--------+------+-------+------------+--------------+
|
+-----+--------+------+-------+------------+--------------+
|
|
|
+-----+--------+------+-------+------------+--------------+
5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息
mysql>
+-----+--------+------------+
|
+-----+--------+------------+
|
|
|
|
|
|
+-----+--------+------------+
6.从student表中查询计算机系和英语系的学生的信息
mysql>
+-----+--------+------+-------+------------+--------------+
|
+-----+--------+------+-------+------------+--------------+
|
|
|
|
+-----+--------+------+-------+------------+--------------+
7.从student表中查询年龄18~22岁的学生信息
mysql>
+-----+------+------+------+------------+--------------+
|
+-----+------+------+------+------------+--------------+
|
+-----+------+------+------+------------+--------------+
mysql>
+-----+------+------+------+------------+--------------+
|
+-----+------+------+------+------------+--------------+
|
+-----+------+------+------+------------+--------------+
8.从student表中查询每个院系有多少人
mysql>
+------------+-----------+
|
+------------+-----------+
|
|
|
+------------+-----------+
9.从score表中查询每个科目的最高分
mysql>
+--------+------------+
|
+--------+------------+
|
|
|
+--------+------------+
10.查询李四的考试科目(c_name)和考试成绩(grade)
mysql>
+--------+-------+
|
+--------+-------+
|
|
+--------+-------+
11.用连接的方式查询所有学生的信息和考试信息
mysql>
+-----+--------+------+-------+------------+--------------+--------+-------+
|
+-----+--------+------+-------+------------+--------------+--------+-------+
|
|
|
|
|
|
|
|
|
|
+-----+--------+------+-------+------------+--------------+--------+-------+
12.计算每个学生的总成绩
mysql>
+-----+--------+------------+
|
+-----+--------+------------+
|
|
|
|
|
|
+-----+--------+------------+
13.计算每个考试科目的平均成绩
mysql>
+--------+------------+
|
+--------+------------+
|
|
|
+--------+------------+
14.查询计算机成绩低于95的学生信息
mysql>
+-----+--------+------+-------+------------+--------------+
|
+-----+--------+------+-------+------------+--------------+
|
|
|
+-----+--------+------+-------+------------+--------------+
15.查询同时参加计算机和英语考试的学生的信息
mysql>
+-----+--------+------+-------+------------+--------------+
|
+-----+--------+------+-------+------------+--------------+
|
|
|
+-----+--------+------+-------+------------+--------------+
mysql>
+-----+--------+------+-------+------------+--------------+
|
+-----+--------+------+-------+------------+--------------+
|
|
|
+-----+--------+------+-------+------------+--------------+
16.将计算机考试成绩按从高到低进行排序
mysql>
+--------+-------+
|
+--------+-------+
|
|
|
|
+--------+-------+
17.从student表和score表中查询出学生的学号,然后合并查询结果
mysql>
+-----+
|
+-----+
|
|
|
|
|
|
+-----+
18.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
mysql>
+-----+--------+------+-------+------------+--------------+--------+-------+
|
+-----+--------+------+-------+------------+--------------+--------+-------+
|
|
|
|
|
|
|
|
+-----+--------+------+-------+------------+--------------+--------+-------+
19.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩
mysql>
+-----+------+------+-------+------------+--------------+--------+-------+
|
+-----+------+------+-------+------------+--------------+--------+-------+
|
|
|
+-----+------+------+-------+------------+--------------+--------+-------+