数据库系统(一)——数据查询
文章目錄
- 一、實驗目的:
- 二、實驗內容:
- 三、實驗過程:
- 1、創建學生課程數據庫 (stu_course):
- 2、學生表、課程表和學生選課表的創建和修改:
- 2.1、創建數據表:
- 2.2、修改數據表:
- 3、插入數據:
- 4、各種類型的查詢操作:
- 4.1 、單表查詢操作:
- 4.2 、多表連接查詢操作:
- 4.3 、嵌套查詢操作:
- 四、總結:
一、實驗目的:
熟練掌握SQL定義數據表和索引的方法;
能夠使用SQL完成數據的單表查詢、多表查詢和嵌套查詢操作。
二、實驗內容:
根據指定場景創建數據庫;
根據具體的查詢應用需求寫出相應的SQL查詢語句,并得到正確的查詢結果。
1、熟悉基于單表的SQL的數據查詢功能;
2、掌握基于單表的GROUP BY子句、HAVING子句、ORDER BY子句的用法;
3、掌握基于單表的(NOT)IN等謂詞的用法,掌握集合函數的用法;
4、掌握多表連接查詢的適用情況和語句構造方法;
三、實驗過程:
1、創建學生課程數據庫 (stu_course):
create database stu_course;2、學生表、課程表和學生選課表的創建和修改:
2.1、創建數據表:
create table Student(Sno char(9)primary key,Sname char(20)unique,Ssex char(2),Sage smallint,Sdept char(20) );create table Course (Cno char(4)primary key,Cname char(4) not null,Cpno char(4),Ccredit smallint ,foreign key(Cpno) references Course(Cno) );create table SC(Sno char(9),Cno char(4),Grade smallint,primary key(Sno,Cno),foreign key(Sno) references Student(Sno),foreign key(Cno) references Course(Cno) );2.2、修改數據表:
在 Student 表增加入學時間列,數據類型為日期型:
alter table Student add S_entrance Date;將年齡的數據類型 由 字符型(假設原來是字符型)改為 整數型:
alter table Student alter column Sage int;增加課程名稱必須取唯一的約束條件:
alter table Course add unique(Cname);刪除 Student表:
drop table Student;3、插入數據:
INSERT INTO student VALUES ('201215121', '李勇', '男', 20, 'CS'); INSERT INTO student VALUES ('201215122', '劉晨', '女', 19, 'CS'); INSERT INTO student VALUES ('201215123', '王敏', '女', 18, 'MA'); INSERT INTO student VALUES ('201215125', '張立', '男', 19, 'IS');INSERT INTO course VALUES ('1', '數據庫', '5', 4); INSERT INTO course VALUES ('2', '數學', NULL, 2); INSERT INTO course VALUES ('3', '信息系統', '1', 4); INSERT INTO course VALUES ('4', '操作系統', '6', 3); INSERT INTO course VALUES ('5', '數據結構', '7', 4); INSERT INTO course VALUES ('6', '數據處理', NULL, 2); INSERT INTO course VALUES ('7', 'PASCAL語言', '6', 4);INSERT INTO sc VALUES ('201215121', '1', 92); INSERT INTO sc VALUES ('201215121', '2', 85); INSERT INTO sc VALUES ('201215121', '3', 88); INSERT INTO sc VALUES ('201215122', '2', 90); INSERT INTO sc VALUES ('201215122', '3', 80);4、各種類型的查詢操作:
4.1 、單表查詢操作:
1、查詢指定列:
查詢所有學生的的學號與姓名:
select Sno,Sname from Student;2、查詢全部列:
查詢所有學生的信息:
select * from Student;3、查詢經過計算的值:
查詢全體學生的姓名和出生年份:
select Sname 2021-Sage from Student;
4、消除出重復的元組:
5、查詢滿足條件的元組:
查詢計算機科學系的所有學生:
select Sname from Student where sdept='CS';查詢年齡小于20的學生:
select * from student where Sage <20;查詢年齡在20~23歲之間的學生姓名,系別和年齡:
select sname,sdept,sage from student where sage between 20 and 23;查詢年齡不在20~23歲之間的學生姓名,系別和年齡:
select sname,sdept,sage from student where sage not between 20 and 23;6、確定集合(IN):
查詢 計算機科學系(CS),數學系(MA)和信息系(IS)學生的姓名和性別。
select Sname,Ssex from student where Sdept in('CS','MA','IS');查詢不是計算機科學系(CS),數學系(MA)和信息系(IS)學生的姓名和性別。
select Sname,Ssex from student where Sdept not in('CS','MA','IS');7、字符匹配(模糊查詢):
like :字符串匹配 % :代表任意長度字符 _ :代表單個字符查詢學號為 201215121 的學生的信息:
select * from where Sno like '201215121';查詢所有姓劉的學生姓名,學號和性別:
select Sname,Sno,Ssex from student where Sname like'劉%'查詢不姓劉的學生姓名,學號和性別:
select Sname,Sno,Ssex from student where Sname not like'劉%'查詢名字中第二個字為 "陽"的學生的姓名,學號:
select Sname,Sno from student where Sname like'_陽%';8、多重條件查詢(and ,or):
查詢計算機系的年齡20歲以下的學生的學生姓名:
select Sname from student where Sdept='CS' and Sage < '20';9、order by:
查詢選了3號課程的學生的學號和成績,按成績的降序排列(默認升序):
select Sno,Grade from SC where Cno='3' order by Grade DESC;10、聚集函數:
count(*) 統計元組個數 count([distinct|all] <列名>) 統計一列中值的個數 Sum([distinct|all] <列名>) 求一列總和 Max([distinct|all] <列名>) 求一列中的最大值 Min([distinct|all] <列名>) 求一列中的最小值 Avg([distinct|all] <列名>) 求一列的平均值查詢學生總人數:
select count(*) from student;查詢選修了課程的總人數:
select count(distinct Sno) from student;查詢學生 201215012 選修課程的總分數:
select sum(Ccredit) from SC,Course where Sno='201215121' and SC.Cno = Course.Cno;11、分組(group by):
求各個課程號及相應的選課人數:
select Cno,count(*) from SC group by Cno;如果分組后還要求按一定的條件對這些組進行篩選,可以使用 having指定篩選條件。
查詢選修了一門以上課程的學生學號:
select Sno from SC group by Sno having count(*)>1;注意:where 子句中是不能用聚集函數的!需要用 having 代替
4.2 、多表連接查詢操作:
一次從兩個及以上的表 查數據稱為連接查詢。
查詢每個學生及其選修課程的情況:
select student.*,SC.* from student,SC where student.Sno=SC.Sno;查詢選修2號課程且成績在90分以上的所有學生的學號和姓名:
select student.Sno,Sname from Student,SC where Student.Sno=SC.Sno and SC.Cno='2' and SC.Grade>90;4.3 、嵌套查詢操作:
四、總結:
-
HAVING 是跟GROUP BY 連在一起用的,放在GROUP BY 后面,此時的作用相當于WHERE。
-
WHERE 后面的條件中不能有聚集函數,比如SUM(),AVG()等,而HAVING 可以
總結
以上是生活随笔為你收集整理的数据库系统(一)——数据查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库系统(五)——数据库设计
- 下一篇: 数据库系统(二)——数据更新和视图