数据库的简单查询和连接查询
①求全体学生信息。②查询软件工程系所有学生的学号和姓名。select Sno,Sname from s where Sdept = ‘软件工程系’;③查询全体学生的姓名和年龄。④查询选修了课程的学生学号。或者select distinct Sno from SC;⑤查询选修了001课程的学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。⑥查询选修了课程001且成绩在80至9
用SQL语句完成以下查询要求
1.简单查询
①求全体学生信息。
select * from s;
②查询软件工程系所有学生的学号和姓名。
select Sno,Sname from s where Sdept = ‘软件工程系’;
③查询全体学生的姓名和年龄。
select Sname,Year(CURDATE())-Year(Sbirth) as age from s;
④查询选修了课程的学生学号。
select Sno from SC;或者select distinct Sno from SC;
⑤查询选修了001课程的学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。
select Sno,grade from SC where Cno = ‘001’ order by grade desc,Sno asc;
⑥查询选修了课程001且成绩在80至90(包括80和90)分之间的学生学号和成绩,并将成绩乘以0.9系数输出。
select Sno,grade*0.9 as newgrade from SC where Cno = ‘001’ and (grade between 80 and 90);
⑦查询讲师或副教授姓王的教师信息。
select * from t where Ttitle in (‘讲师’,‘副教授’) and Tname like ‘王%’;
⑧查询缺少成绩的学生学号和课程号。
select Sno,Cno from SC where grade is null;
2.连接查询
①查询每个学生的基本情况及其选修课程情况。
select S.*,SC.* from S,SC where S.Sno = SC.Sno;或者 select S.*,SC.* from S join SC on S.Sno = SC.Sno;
②查询学生的学号、姓名、选修的课程名及成绩。
select S.Sno,Sname,SC.Cno,C.Cname,SC.Grade from S,SC,C where S.Sno = SC.Sno and C.Cno = SC.Cno;
或者
select S.Sno,Sname,SC.Cno,C.Cname,SC.Grade from S join SC on S.Sno = SC.Sno join C on C.Cno = SC.Cno;
③查询王美同学的学号、姓名及其最高成绩。
select S.Sno,Sname,max(SC.grade) as maxgrade from S,SC where S.Sno = SC.Sno and Sname = ‘王美’;
④查询所有教师的教师号、姓名、职称和所授课程名。
select T.Tno,Tname,Ttitle,TC.Cno,C.Cname from t,tc,c where T.Tno = TC.Tno and C.Cno = TC.Cno;
⑤查询所有讲师所授课程的课程名称及学分。
select C.Cname,C.Credits from t,tc,c where T.Ttitle = ‘讲师’ and T.Tno = TC.Tno and TC.Cno = C.Cno;
⑥查询选修了两门以上(含两门)课程的学号。
select Sno from SC where Sno <> 20418004;
⑦查询选修了数据库原理及应用课程且成绩在85分以上的学生学号、姓名及成绩。
select S.Sno,Sname,grade from s join SC on S.Sno = SC.Sno join C on C.Cno = SC.Cno where SC.Cno = ‘004’ and grade>= 85;
⑧用语句Transact-SQL表示学生基本情况表(S)和选修课程情况表(SC)之间的左外连接、右外连接和完全外连接。
3.注意事项
1.如果想去掉查询结果表中的重复行,必须加指定distinct短语。
2.输入SQL语句时,应注意语句中均使用西文操作符号。
3.本地服务器名称可以通过查询“我的电脑”属性得到,或者将鼠标移至屏幕右下角正在运行的服务器图标上获取。
4.通过top关键字来限制返回到结果集中的行数,其基本格式如下。
Select top n [ percent ] * from 表名
如果没有percent关键字,n就是返回前几条记录的行数;如果带有percent关键字,n则是返回结果集中行数的百分比。
5.对数据类型为text和image的字段不能使用Order by进行排序;在Order by子句中也不能使用子查询、聚合函数和常量表达式。
外连接
MySQL:内左外、右外连接和完全连接的3个查询要求表达为:
select * from s inner join sc on s.sno = sc.sno;
select s.sno, s.sname, sc.grade from 月s left join sc on .sno=sc.sno;
select s.*, sc.grade from s right join sc on s.sno=c.sno;
MySQL不支持全连接(full join)可以使用: left join+ union + right join;
(SELECT * from s left JOIN sc on s.sno=sc.sno) ;
UNION;
(SELECT * from s RIGHT JOIN sc on s.sno=sc.sno );
SQL Server:内左外、右外连接和完全连接的3个查询要求表达为:
select s., sc.cno, sc.grade from s left join sc on s.sno=sc.sno
select sc., c.cname from sc right join c on c.cno=sc.cno
select s., sc. from s cross join sc
思考题
1、在Select语句中使用什么关键字,可消除字段的重复项。
在Select语句中,使用关键字DISTINCT可以消除字段的重复项。DISTINCT关键字将返回结果集中唯一不同的值,即删除重复的行。例如,以下SELECT语句将返回一个唯一的城市列表:
SELECT DISTINCT city FROM customers;
这将从“customers”表中选择不同的城市,并将结果作为一个列表返回,而不会显示重复的城市名称。
2、如果要查询学生表中前4行记录,应该使用的语句是:
如果学生表的表名为student,查询前4行记录的语句可以使用LIMIT关键字和SELECT语句,如下所示:
SELECT * FROM student LIMIT 4;
这条语句会返回student表中的前4行记录,其中*表示返回所有的列。
3、有一种查询叫模糊查询,在SQL语句中要使用什么关键字来实现这种查询方式。
在SQL语句中,可以使用“LIKE”关键字来实现模糊查询。
在使用“LIKE”关键字时,可以结合通配符“%”和“”来匹配模糊的文本。其中,“%”表示匹配零个或多个任意字符,“”表示匹配一个任意字符。
例如,如果想要查找包含单词“apple”的记录,可以使用以下语句进行模糊查询:
SELECT * FROM table_name WHERE column_name LIKE ‘%apple%’;
这将返回包含单词“apple”的所有记录,无论这个单词在列中的什么位置。
4、如何提高数据查询和连接速度。
提高数据查询和连接速度需要综合考虑多个因素,包括硬件、软件和网络方面的因素。以下是一些常用的方法和建议:
1.优化数据库结构和查询语句:合理设计表结构和索引,使用正确的查询语句,避免不必要的连接和查询,可以显著提高查询速度。
2.使用缓存技术:可以使用缓存来减少查询和连接数据库的次数,提高响应速度。常见的缓存技术包括 Memcached 和 Redis。
3.优化网络环境:如果数据查询和连接跨越多个数据中心或地理位置,可以使用 CDN 或者负载均衡器来加速数据传输,降低网络延迟。
4.使用 SSD 硬盘:相比传统的机械硬盘,SSD 硬盘具有更快的读写速度,可以显著提高数据查询和连接速度。
5.增加硬件资源:增加服务器的 CPU、内存等硬件资源可以提高服务器的计算和响应速度。
6.使用分布式架构:对于大型系统和高并发访问场景,可以采用分布式架构来实现负载均衡和高可用性,提高数据查询和连接的速度和稳定性。
7.使用合适的数据库:根据实际应用场景和需求选择合适的数据库,比如 NoSQL 数据库在某些场景下具有更高的性能和可扩展性。
总之,提高数据查询和连接速度需要综合考虑多个因素,并根据实际情况采取合适的方法和技术。
5、理解内连接、左外连接和右外连接的含义及表达方法。
内连接、左外连接和右外连接是关系型数据库中常用的连接方式。它们可以将多个表中的数据联合起来,从而满足复杂查询的需求。
1.内连接(Inner Join)
内连接是通过共同的列将两个或多个表连接起来的方式。它只返回那些在连接条件中同时存在于两个表中的行。内连接的表达方法如下:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
其中,SELECT 语句指定要查询的列名,table1 和 table2 是要连接的表名,column_name 是连接条件列的列名。
2.左外连接(Left Outer Join)
左外连接返回左表中所有的行以及右表中满足连接条件的行,如果右表中没有匹配的行,则返回 NULL 值。左外连接的表达方法如下:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
其中,SELECT 语句指定要查询的列名,table1 和 table2 是要连接的表名,column_name 是连接条件列的列名。
3.右外连接(Right Outer Join)
右外连接和左外连接类似,但是它返回右表中所有的行以及左表中满足连接条件的行,如果左表中没有匹配的行,则返回 NULL 值。右外连接的表达方法如下:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
其中,SELECT 语句指定要查询的列名,table1 和 table2 是要连接的表名,column_name 是连接条件列的列名。
更多推荐
所有评论(0)