数据库

首页 » 常识 » 预防 » 实验5MySQL数据库表数据的查询操作
TUhjnbcbe - 2025/1/22 23:39:00

实验5.MySQL数据库表数据的查询操作实验

1、实验目的

掌握SELECT语句的基本语法格式。

掌握SELECT语句的执行方法。

掌握SELECT语句的GROUPBY和ORDERBY子句的作用。

2、实验内容

在公司的部门员工管理数据库的bumen表和yuangong表上进行信息查询。bumen表和yuangong表的定义如:

#创建数据库chapter05

createdatabasechapter05;

#使用数据库chapter05

USEchapter05;

#创建bumen表

CREATETABLEbumen(

d_idINT(4)NOTNULL,

d_nameVARCHAR(20)NOTNULL,

functionVARCHAR(20)NULL,

addressVARCHAR(30)NULL,

PRIMARYKEY(d_id));

#查看bumen表结构

descbumen;

#创建yuangong表

CREATETABLEyuangong(

idINT(4)NOTNULL,

nameVARCHAR(20)NOTNULL,

sexVARCHAR(4)NOTNULL,

birthdayINT(4)NULL,

d_idVARCHAR(20)NOTNULL,

salaryFloatNULL,

addressVARCHAR(50)NULL,

PRIMARYKEY(id));

#查看yuangong表结构

descyuangong;

#在bumen表和yuangong表插入记录。

insertintobumenvalues(,人事部,人事管理,北京);

insertintobumenvalues(,科研部,研发产品,北京);

insertintobumenvalues(,生产部,产品生产,天津);

insertintobumenvalues(,销售部,产品销售,上海);

insertintoyuangongvalues(,韩鹏,男,25,,,北京市海淀区);

insertintoyuangongvalues(,张峰,男,26,,,北京市昌平区);

insertintoyuangongvalues(,欧阳,男,20,,,湖南省永州市);

insertintoyuangongvalues(,王武,男,30,,,北京市顺义区);

insertintoyuangongvalues(,欧阳宝贝,女,21,,,北京市昌平区);

insertintoyuangongvalues(,呼延,man,28,,,天津市南开区);

然后在bumen表和yuangong表查询记录。

(1)查询yuangong表的所有记录。SQL代码:

select*fromyuangong;

或者列出yuangong表的所有字段名称。SQL代码:

selectid,name,sex,birthday,d_id,salary,addressfromyuangong;

(2)查询yuangong表的第四条到第五条记录。

selectid,name,sex,birthday,d_id,salary,addressfromyuangonglimit3,2;

(3)从bumen表查询部门号(d_id)、部门名称(d_name)和部门职能(function)。SQL代码:

selectd_id,d_name,functionfrombumen;

(4)从yuangong表中查询人事部和科研部的员工的信息。先从bumen表查询出人事部和科研部的部门号。然后到yuangong表中去查询员工的信息。SQL代码:

select*fromyuangong

whered_id=any(

selectd_idfrombumen

whered_namein(人事部,科研部));

或者使用下面的代码。代码如下:

select*fromyuangong

whered_idin(

selectd_idfrombumen

whered_name=人事部ord_name=科研部);

(5)从yuangong表中查询年龄在25到30之间的员工的信息。可以通过两种方式来查询。

第一种方式的SQL代码:

select*fromyuangongwherebirthdaybetween25and30;

第二种方式的SQL代码:

select*fromyuangongwherebirthday=25andbirthday=30;

(6)查询每个部门有多少员工。先按部门号进行分组,然后用COUNT()函数来计算每组的人数。SQL代码:

selectd_id,count(id)fromyuangonggroupbyd_id;

或者给COUNT(id)取名为sum。其SQL代码为:

selectd_id,count(id)assumfromyuangonggroupbyd_id;

(7)查询每个部门的最高工资。先按部门号进行分组,然后用MAX()函数来计算最大值。SQL代码:

selectd_id,max(salary)fromyuangonggroupbyd_id;

(8)用左连接的方式查询bumen表和yuangong表。

使用LEFTJOINON来实现左连接。SQL代码:

selectbumen.d_id,d_name,function,bumen.address,id,name,birthday,sex,salary,yuangong.address

frombumenleftjoinyuangongonyuangong.d_id=bumen.d_id;

(9)计算每个部门的总工资。先按部门号进行分组,然后用SUM()函数来求和。SQL代码:

selectd_id,sum(salary)fromyuangonggroupbyd_id;

(10)查询yuangong表,按照工资从高到低的顺序排列。SQL代码:

select*fromyuangongorderbysalarydesc;

(11)查询家是北京市员工的姓名、年龄、家庭住址。这里使用LIKE关键字。SQL代码:

selectname,birthday,addressfromyuangongwhereaddresslike北京%;

3、观察与思考

(1)、LIKE的通配符有哪些?分别代表什么含义?

%(百分号):代表任意长度(长度可以为0)的字符串。

_(下横线):代表任意单个字符。

(2)、知道学生的出生日期,如何求出其年龄?

float(datadiff(year,birthday,getdata())/.25)

birthday=’xxxx-xx-xx’

getdata()=’xxxx-xx-xx’

(3)、IS能用“=”来代替吗?如何周全地考虑“空数据”的情况?

不能。该属性应该有一个值,但不知道具体值;该属性不应该有值;由于某种原因不便于填写。

(4)、关键字ALL和DISTINCT有什么不同的含义?关键字ALL是否可以省略不写?

all:返回所有的记录;distinct:去掉查询返回的记录中重复的记录。

all在select子句里省略,对结果无影响,在union子句里省略则表示剔除有重复的行,反之则保留所有记录行。

(5)、聚集函数能否直接使用在SELECT子句、HAVING子句、WHERE子句、GROUPBY子句中?

聚集函数只能用于select子句,groupby中的having子句,where子句是一个条件语句,在where后面跟的是条件。

6、WHERE子句与HAVING子句有何不同?

作用对象不同:where子句作用于基本表或视图,从中选择满足条件的元祖,having子句作用于组,从中选择满足条件的组。

7、count(*)、count(列名)、count(distinct列名)三者的区别是什么?通过一个实例说明。

count(*):明确的返回数据表中的元组数据个数,不会忽略值为null的字段

count(列名):返回数据表中的某列数据个数,不统计值为null的字段

count(disinct列名):返回数据表中某列不重复的数据个数,不统计值为null的字段

selectcount(distinctd_id)fromyuangong;

selectcount(d_id)fromyuangong;

selectcount(*)fromyuangong;

8、内连接与外连接有什么区别?

内连接:比较运算符根据每个表共有的列的值匹配两个表中的行(使用像=或之类的比较运算符)

外连接:当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值(使用left/right/fulljoin或left/right/fullouterjoin关键字)

9、“=”与IN在什么情况下作用相同?

当in的候选值只有一个时。

1
查看完整版本: 实验5MySQL数据库表数据的查询操作