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