实验五---SELECT数据查询

合集下载

查询数据表中的记录SELECT

查询数据表中的记录SELECT

查询数据表中的记录(SELECT)SELECT 语句可以帮助我们从MySQL中取出数据。

SELECT 大概是 SQL 语言中最常用的语句,而且怎样使用它也最为讲究;用它来选择记录可能相当复杂,可能会涉及许多表中列之间的比较。

本节介绍Select语句关于查询的最基本功能。

除非最终检索它们并利用它们来做点事情,否则将记录放入数据库没什么好处。

这就是SELECT 语句的用途,即帮助取出数据。

SELECT 大概是 SQL 语言中最常用的语句,而且怎样使用它也最为讲究;用它来选择记录可能相当复杂,可能会涉及许多表中列之间的比较。

本节介绍Select语句关于查询的最基本功能。

SELECT 语句的语法如下:SELECT selection_list 选择哪些列FROM table_list 从何处选择行WHERE primary_constraint 行必须满足什么条件GROUP BY grouping_columns 怎样对结果分组HAVING secondary_constraint 行必须满足的第二条件ORDER BY sorting_columns 怎样对结果排序LIMIT count 结果限定注意:所有使用的关键词必须精确地以上面的顺序给出。

例如,一个HAVING子句必须跟在GROUP BY子句之后和ORDER BY子句之前。

除了词“SELECT”和说明希望检索什么的 column_list 部分外,语法中的每样东西都是可选的。

有的数据库还需要 FROM 子句。

MySQL 有所不同,它允许对表达式求值而不引用任何表。

普通查询SELECT最简单的形式是从一张表中检索每样东西:mysql> SELECT * FROM pet;其结果为:+----------+--------+---------+------+------------+------------+| name | owner | species | sex | birth | death |+----------+--------+---------+------+------------+------------+| Fluffy | Harold | cat | f | 1993-02-04 | NULL || Claws | Gwen | cat | m | 1994-03-17 | NULL || Buffy | Harold | dog | f | 1989-05-13 | NULL || Chirpy | Gwen | bird | f | 1998-09-11 | NULL || Fang | Benny | dog | m | 1990-08-27 | NULL || Bowser | Diane | dog | m | 1990-08-31 | 1995-07-29 || Whistler | Gwen | bird | NULL | 1997-12-09 | NULL || Slim | Benny | snake | m | 1996-04-29 | NULL || Puffball | Diane | hamster | f | 1999-03-30 | NULL |+----------+--------+---------+------+------------+------------+查询特定行:你能从你的表中只选择特定的行。

select查询语句

select查询语句

select查询语句前⾔最近有空,总结⼀下,select的查询语句⽤法,使⽤的是MySQL数据库,使⽤的数据库是mysql官⽅公⽤测试数据,可以参考https:///qq_26896085/article/details/104843889,如果按此操作后,使⽤mysql客户端却查不到employees数据库的话,但是在服务器端通过 show databases;命令却能查到的话,那就是权限问题,需要给客户端使⽤的远程⽤户分配这个数据库的权限。

⼀、检索单个列与检索多个列⼆、通配符的使⽤三、筛选结果限制⼀、检索单个列与检索多个列基本语法是 select 要查询的列名 from 表名;进⾏查询,⾸先要明⽩两个部分,⼀是要查询那些东西,⼆是从哪个地⽅查如果要查询单列,使⽤这个 select 要查询的列名 from 表名;就可以,如果要查询多列的话,select 列名,列名,列名 from 表名;,多个列之间⽤英⽂的逗号","隔开,⼀般⼀个sql写完之后,要在后⾯加上英⽂的分号";",虽说此分号加不加不影响结果,但是多条语句⼀起执⾏时,如果不加sql则会报错。

⽐如,我要查询部门员⼯表dept_emp的员⼯号语句 select emp_no from depr_emp;结果为:如果我要查询,部门员⼯表中的员⼯号,对应部门编号语句:select emp_no,dept_no from dept_emp;⼆、通配符的使⽤如果要查询某张表的所有字段时,或者不知道某张表中都有哪些字段,可以采⽤通配符 "",语法就是 select * from 表名;* 代表的所有的,⼀般在代码编程中会尽量避免使⽤,因为会影响查询效率例如:要查询部门员⼯表 select * from dept_emp;三、筛选结果限制在这⾥只要讲的是限制返回条数,⼀般⽤于分页⽐如,返回部门员⼯表的前五⾏语句:select * from dept_emp limit 5;等价与 select * from dept_emp limit 0,5;如果要返回部门员⼯表的第6到10⾏则为 select * from dept_emp limit 6,5; 是不是有点奇怪,limit后⾯为什么不是 6,10,那是因为逗号前⾯的6代表从第6⾏开始,⽽逗号后⾯的数字则代表了要查询得⾏数,⽽第6⾏到第10⾏总共5⾏,那它的⾏数就是5所以是 6,5(从MySQL5开始对此引⼊了offset,部门员⼯表的第6到10⾏也可以写成select * from dept_emp limit 5 offset 6; offset前⾯的数字是要查询的⾏数,offset后的数字是开始⾏数)。

数据库select语句用法

数据库select语句用法

数据库select语句用法Select 语句用于从数据库中查询特定的记录,从而得到所需要的信息。

它是 SQL (Structured Query Language)中最常用的语句,它可以读取现有数据库中的一个或多个表,从中提取数据并以用户指定的表示方式呈现出来。

SELECT 列名称 FROM 表名称Select 列名称:可指定要查询的数据库列。

From 表名称:指定从哪个表中查询数据。

通常,Select 语句的第一部分是由字段名(列名)或是表达式组成的 select 列表。

如果 select 列表包含多个字段,那么字段名之间必须用逗号分隔。

from 子句可以指定一个表名,也可以指定多个表名。

它还包括一个或多个 join 子句,用于连接不同的表,以便查询更多的数据。

最后,where 子句可选择性地指定查询条件,以便仅仅检索出满足指定条件的数据记录。

例子:以下示例用于从名为“Customers” 的表中查询所有的客户名称和客户电话号码:SELECT CustomerName,Phone FROM Customers;通配符:在 Select 语句中,还可以使用通配符(*)来代替某列,用于查询所有列。

例如,下面的 Select 语句会查询所有客户信息:此外,也可以使用通配符来代表所有表:此外,Select 语句还支持子查询。

子查询是指将一个语句的结果作为另一个查询的输入。

例如,假设我们想查询所有住在法国的客户,可以使用以下语句:SELECT * FROM CustomersWHERE Country IN (SELECT Country FROM Countries WHERE Region = 'Europe' AND Name = 'France');在上面的语句中,Countries 表被用来定义需要找到的国家,即法国,然后将结果作为 IN 子句的输入,从而查询相关的客户信息。

05实验五参考标准答案

05实验五参考标准答案

实验五SQL参数查询、子查询与数据更新
第二部分实验:
打开“图书管理”数据库,完成下列工作。

已知一个图书管理信息系统,其数据表间约束如下图所示,各个数据表的数据类型如上题表所示。

编写SQL完成下列功能。

用子查询完成以下实验:
(1)查询未归还图书的读者编号、姓名和性别。

(2)查询没有借过书的读者姓名
(3)查询至少借阅了3本图书的读者编号、姓名、图书编号和图书名称,并按读者编号排序(4)查询已借阅图书但尚未归还的读者编号、姓名和工作单位
(5)查询没有借阅管理类图书的读者编号、姓名和出生日期
用数据更新完成以下实验:
(6)将计算机类的图书单价减少5元
(7)将1987年出生的读者所借图书改为“已归还”
(8)插入一条借书记录:读者编号06-00008,图书编号003-000024,借书日期2007-3-25,还书日期2007-5-25,未归还。

(9)删除2006年8月的借书记录。

(10)删除读者欧阳思思的借书记录。

用参数查询完成以下实验:
(11)输入图书入库时间上、下限,查询在上限和下限期间入库图书的图书编号、图书名称和入库时间。

MySQL数据库之select查询语句

MySQL数据库之select查询语句

MySQL数据库之select查询语句select查询语句语法select [选项] 列名 [from 表名] [where 条件] [group by 分组] [order by 排序][having 条件] [limit 限制]select字段表达式可以直接输出内容MariaDB [sel]> select 'Sunny is a boy!';+-----------------+| Sunny is a boy! |+-----------------+| Sunny is a boy! |+-----------------+# `1 row in set (0.000 sec)`输出表达式MariaDB [sel]> select 10*27;+-------+| 10*27 |+-------+| 270 |+-------+# `1 row in set (0.000 sec)`MariaDB [sel]> select name,chinese,math,chinese+math from grades;+-------+---------+------+--------------+| name | chinese | math | chinese+math |+-------+---------+------+--------------+| Sunny | 93 | 96 | 189 || Jerry | 97 | 91 | 188 || Marry | 95 | 94 | 189 || Tommy | 98 | 94 | 192 |+-------+---------+------+--------------+# `4 rows in set (0.000 sec)`输出函数表达式MariaDB [sel]> select rand();+-------------------+| rand() |+-------------------+| 0.294372641755615 |+-------------------+# `1 row in set (0.007 sec)`通过as给字段取别名as可以省略MariaDB [sel]> select 'Sunny' as 'name';+-------+| name |+-------+| Sunny |+-------+# `1 row in set (0.000 sec)`MariaDB [sel]> select name,chinese,math,chinese+math as '总分' from grades;+-------+---------+------+------+| name | chinese | math | 总分 |+-------+---------+------+------+| Sunny | 93 | 96 | 189 || Jerry | 97 | 91 | 188 || Marry | 95 | 94 | 189 || Tommy | 98 | 94 | 192 |+-------+---------+------+------+# `4 rows in set (0.007 sec)`MariaDB [sel]> select name,chinese,math,chinese+math '总分' from grades;+-------+---------+------+------+| name | chinese | math | 总分 |+-------+---------+------+------+| Sunny | 93 | 96 | 189 || Jerry | 97 | 91 | 188 || Marry | 95 | 94 | 189 || Tommy | 98 | 94 | 192 |+-------+---------+------+------+# `4 rows in set (0.001 sec)`from⼦句from [表名]from后⾯跟的是数据源数据源可以有多个,返回笛卡尔积-- 创建数据表MariaDB [sel]> create table stu1(-> name varchar(20)-> )charset=gbk;# `Query OK, 0 rows affected (0.026 sec)`MariaDB [sel]> insert into stu1 values ('Sunny'),('Jerry');# `Query OK, 2 rows affected (0.012 sec)`# `Records: 2 Duplicates: 0 Warnings: 0`MariaDB [sel]> create table stu2(-> age int-> )charset=gbk;# `Query OK, 0 rows affected (0.023 sec)`MariaDB [sel]> insert into stu2 values (20),(24);# `Query OK, 2 rows affected (0.012 sec)`# `Records: 2 Duplicates: 0 Warnings: 0`-- from⼦句查询MariaDB [sel]> select * from stu1;+-------+| name |+-------+| Sunny || Jerry |+-------+# `2 rows in set (0.000 sec)`-- from返回笛卡尔积MariaDB [sel]> select * from stu1,stu2;+-------+------+| name | age |+-------+------+| Sunny | 20 || Jerry | 20 || Sunny | 24 || Jerry | 24 |+-------+------+# `4 rows in set (0.000 sec)`dual表概念dual表是⼀个伪表在有些特定情况下,没有具体的表的参与为了保证select语句的完整⼜必须要⼀个表名,这时候就使⽤伪表MariaDB [sel]> select 10*27 as '结果' from dual;+------+| 结果 |+------+| 270 |+------+# `1 row in set (0.007 sec)`where⼦句概念where后⾯跟的是条件,在数据源中进⾏筛选返回条件为真记录MySQL⽀持的运算符⽐较运算符>⼤于<⼩于>=⼤于等于<=⼩于等于=等于!=不等于逻辑运算符and与or或not⾮其他in | not in字段的值在枚举范围内between...and | not between...and字段的值在数字范围内is null | is not null字段的值不为空-- ⽐较运算判断MariaDB [sel]> select * from grades where math=94;+-------+---------+------+| name | chinese | math |+-------+---------+------+| Marry | 95 | 94 || Tommy | 98 | 94 |+-------+---------+------+# `2 rows in set (0.007 sec)`-- 输出所有数据MariaDB [sel]> select * from grades where 1;+-------+---------+------+| name | chinese | math |+-------+---------+------+| Sunny | 93 | 96 || Jerry | 97 | 91 || Marry | 95 | 94 || Tommy | 98 | 94 |+-------+---------+------+# `4 rows in set (0.000 sec)`-- 不输出数据MariaDB [sel]> select * from grades where 0;# `Empty set (0.000 sec)`-- 逻辑运算判断MariaDB [sel]> select * from grades where math=96 or math=91;+-------+---------+------+| name | chinese | math |+-------+---------+------+| Sunny | 93 | 96 || Jerry | 97 | 91 |+-------+---------+------+# `2 rows in set (0.001 sec)`MariaDB [sel]> select * from grades where math in (91,96);+-------+---------+------+| name | chinese | math |+-------+---------+------+| Sunny | 93 | 96 || Jerry | 97 | 91 |+-------+---------+------+# `2 rows in set (0.000 sec)`MariaDB [sel]> select * from grades where math not in (91,96);+-------+---------+------+| name | chinese | math |+-------+---------+------+| Marry | 95 | 94 || Tommy | 98 | 94 |+-------+---------+------+# `2 rows in set (0.000 sec)`查找年龄在20~25之间-- ⽅法⼀:mysql> select * from stu where stuage>=20 and stuage<=25;-- ⽅法⼆:mysql> select * from stu where not(stuage<20 or stuage>25);-- ⽅法三:between...and...mysql> select * from stu where stuage between 20 and 25;-- 年龄不在20~25之间mysql> select * from stu where stuage not between 20 and 25;查找缺考的学⽣mysql> select * from stu where ch is null or math is null;+--------+----------+--------+--------+---------+------------+------+------+| stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |+--------+----------+--------+--------+---------+------------+------+------+| s25301 | 张秋丽 | 男 | 18 | 1 | 北京 | 80 | NULL || s25304 | 欧阳俊雄 | 男 | 28 | 4 | 天津 | NULL | 74 |+--------+----------+--------+--------+---------+------------+------+------+查找没有缺考的学⽣mysql> select * from stu where ch is not null and math is not null;+--------+----------+--------+--------+---------+------------+------+------+| stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |+--------+----------+--------+--------+---------+------------+------+------+| s25302 | 李⽂才 | 男 | 31 | 3 | 上海 | 77 | 76 || s25303 | 李斯⽂ | ⼥ | 22 | 2 | 北京 | 55 | 82 || s25305 | 诸葛丽丽 | ⼥ | 23 | 7 | 河南 | 72 | 56 || s25318 | 争青⼩⼦ | 男 | 26 | 6 | 天津 | 86 | 92 || s25319 | 梅超风 | ⼥ | 23 | 5 | 河北 | 74 | 67 || s25320 | Tom | 男 | 24 | 8 | 北京 | 65 | 67 || s25321 | Tabm | ⼥ | 23 | 9 | 河北 | 88 | 77 |+--------+----------+--------+--------+---------+------------+------+------+# `7 rows in set (0.00 sec)`查找需要补考的学⽣mysql> select * from stu where ch<60 or math<60 or ch is null or math is null; +--------+----------+--------+--------+---------+------------+------+------+| stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |+--------+----------+--------+--------+---------+------------+------+------+| s25301 | 张秋丽 | 男 | 18 | 1 | 北京 | 80 | NULL || s25303 | 李斯⽂ | ⼥ | 22 | 2 | 北京 | 55 | 82 || s25304 | 欧阳俊雄 | 男 | 28 | 4 | 天津 | NULL | 74 || s25305 | 诸葛丽丽 | ⼥ | 23 | 7 | 河南 | 72 | 56 |+--------+----------+--------+--------+---------+------------+------+------+4 rows in set (0.00 sec)查找学号是s25301,s25302,s25303的学⽣mysql> select * from stu where stuno in ('s25301','s25302','s25303');+--------+---------+--------+--------+---------+------------+------+------+| stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |+--------+---------+--------+--------+---------+------------+------+------+| s25301 | 张秋丽 | 男 | 18 | 1 | 北京 | 80 | NULL || s25302 | 李⽂才 | 男 | 31 | 3 | 上海 | 77 | 76 || s25303 | 李斯⽂ | ⼥ | 22 | 2 | 北京 | 55 | 82 |+--------+---------+--------+--------+---------+------------+------+------+# `3 rows in set (0.00 sec)`查找年龄是18~20的学⽣mysql> select * from stu where stuage between 18 and 20;+--------+---------+--------+--------+---------+------------+------+------+| stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |+--------+---------+--------+--------+---------+------------+------+------+| s25301 | 张秋丽 | 男 | 18 | 1 | 北京 | 80 | NULL |+--------+---------+--------+--------+---------+------------+------+------+1 row in set (0.00 sec)group by [分组查询]概念将查询的结果分组,分组查询⽬的在于统计数据如果是分组查询,查询字段是分组字段和聚合函数查询字段是普通字段,只取第⼀个值group_concat()将同⼀组的数据连接起来-- 查询男⽣和⼥⽣的各⾃语⽂平均分mysql> select stusex,avg(ch) '平均分' from stu group by stusex;+--------+---------+| stusex | 平均分 |+--------+---------+| ⼥ | 72.2500 || 男 | 77.0000 |+--------+---------+# `2 rows in set (0.00 sec)`-- 查询男⽣和⼥⽣各⾃多少⼈mysql> select stusex,count(*) ⼈数 from stu group by stusex;+--------+------+| stusex | ⼈数 |+--------+------+| ⼥ | 4 || 男 | 5 |+--------+------+# `2 rows in set (0.00 sec)`-- 查询每个地区多少⼈mysql> select stuaddress,count(*) from stu group by stuaddress;+------------+----------+| stuaddress | count(*) |+------------+----------+| 上海 | 1 || 北京 | 3 || 天津 | 2 || 河北 | 2 || 河南 | 1 |+------------+----------+# `5 rows in set (0.00 sec)`-- 每个地区的数学平均分mysql> select stuaddress,avg(math) from stu group by stuaddress;+------------+-----------+| stuaddress | avg(math) |+------------+-----------+| 上海 | 76.0000 || 北京 | 74.5000 || 天津 | 83.0000 || 河北 | 72.0000 || 河南 | 56.0000 |+------------+-----------+# `5 rows in set (0.00 sec)`group_concat()函数将同⼀组的值连接起来显⽰mysql> select group_concat(stuname),stusex,avg(math) from stu group by stusex; +-------------------------------------+--------+-----------+| group_concat(stuname) | stusex | avg(math) |+-------------------------------------+--------+-----------+| 李斯⽂,诸葛丽丽,梅超风,Tabm | ⼥ | 70.5000 || 张秋丽,李⽂才,欧阳俊雄,争青⼩⼦,Tom | 男 | 77.2500 |+-------------------------------------+--------+-----------+# `2 rows in set (0.00 sec)`多列分组mysql> select stuaddress,stusex,avg(math) from stu group by stuaddress,stusex; +------------+--------+-----------+| stuaddress | stusex | avg(math) |+------------+--------+-----------+| 上海 | 男 | 76.0000 || 北京 | ⼥ | 82.0000 || 北京 | 男 | 67.0000 || 天津 | 男 | 83.0000 || 河北 | ⼥ | 72.0000 || 河南 | ⼥ | 56.0000 |+------------+--------+-----------+# `6 rows in set (0.00 sec)`order by [排序]asc升序 [默认]desc降序MariaDB [sel]> select * from grades order by math desc;+-------+---------+------+| name | chinese | math |+-------+---------+------+| Sunny | 93 | 96 || Marry | 95 | 94 || Tommy | 98 | 94 || Jerry | 97 | 91 |+-------+---------+------+# `4 rows in set (0.001 sec)`-- 按总分降序排列MariaDB [sel]> select *,chinese+math from grades order by math+chinese desc; +-------+---------+------+--------------+| name | chinese | math | chinese+math |+-------+---------+------+--------------+| Tommy | 98 | 94 | 192 || Sunny | 93 | 96 | 189 || Marry | 95 | 94 | 189 || Jerry | 97 | 91 | 188 |+-------+---------+------+--------------+# `4 rows in set (0.001 sec)`MariaDB [sel]> select *,chinese+math '总分' from grades order by math+chinese desc; +-------+---------+------+------+| name | chinese | math | 总分 |+-------+---------+------+------+| Tommy | 98 | 94 | 192 || Sunny | 93 | 96 | 189 || Marry | 95 | 94 | 189 || Jerry | 97 | 91 | 188 |+-------+---------+------+------+# `4 rows in set (0.000 sec)`多列排序前列为主,后列为辅MariaDB [sel]> select * from grades order by math desc,chinese asc;+-------+---------+------+| name | chinese | math |+-------+---------+------+| Sunny | 93 | 96 || Marry | 95 | 94 || Tommy | 98 | 94 || Jerry | 97 | 91 |+-------+---------+------+# `4 rows in set (0.000 sec)`having条件概念是在结果集上进⾏条件筛选having和where的区别where是对原始数据进⾏筛选having是对记录集进⾏筛选-- having与where相同MariaDB [sel]> select * from grades where math=94;+-------+---------+------+| name | chinese | math |+-------+---------+------+| Marry | 95 | 94 || Tommy | 98 | 94 |+-------+---------+------+# `2 rows in set (0.000 sec)`MariaDB [sel]> select * from grades having math=94;+-------+---------+------+| name | chinese | math |+-------+---------+------+| Marry | 95 | 94 || Tommy | 98 | 94 |+-------+---------+------+# 2 rows in set (0.000 sec)-- having与where不同MariaDB [sel]> select name from grades where math=94;+-------+| name |+-------+| Marry || Tommy |+-------+# `2 rows in set (0.000 sec)`MariaDB [sel]> select name from grades having math=94;# `ERROR 1054 (42S22): Unknown column 'math' in 'having clause'`limit语法limit [起始位置],显⽰长度-- 从第0个位置开始取,取3条记录mysql> select * from stu limit 0,3;-- 从第2个位置开始取,取3条记录mysql> select * from stu limit 2,3;+--------+----------+--------+--------+---------+------------+------+------+| stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |+--------+----------+--------+--------+---------+------------+------+------+| s25303 | 李斯⽂ | ⼥ | 22 | 2 | 北京 | 55 | 82 || s25304 | 欧阳俊雄 | 男 | 28 | 4 | 天津 | NULL | 74 || s25305 | 诸葛丽丽 | ⼥ | 23 | 7 | 河南 | 72 | 56 |+--------+----------+--------+--------+---------+------------+------+------+# `3 rows in set (0.00 sec)`起始位置可以省略,默认是从0开始mysql> select * from stu limit 3;+--------+---------+--------+--------+---------+------------+------+------+| stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |+--------+---------+--------+--------+---------+------------+------+------+| s25301 | 张秋丽 | 男 | 18 | 1 | 北京 | 80 | NULL || s25302 | 李⽂才 | 男 | 31 | 3 | 上海 | 77 | 76 || s25303 | 李斯⽂ | ⼥ | 22 | 2 | 北京 | 55 | 82 |+--------+---------+--------+--------+---------+------------+------+------+# `3 rows in set (0.00 sec)`找出班级总分前三名mysql> select *,ch+math total from stu order by (ch+math) desc limit 0,3;+--------+----------+--------+--------+---------+------------+------+------+-------+| stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math | total | +--------+----------+--------+--------+---------+------------+------+------+-------+| s25318 | 争青⼩⼦ | 男 | 26 | 6 | 天津 | 86 | 92 | 178 || s25321 | Tabm | ⼥ | 23 | 9 | 河北 | 88 | 77 | 165 || s25302 | 李⽂才 | 男 | 31 | 3 | 上海 | 77 | 76 | 153 |+--------+----------+--------+--------+---------+------------+------+------+-------+# `3 rows in set (0.00 sec)`limit在update和delete语句中也是可以使⽤的-- 前3名语⽂成绩加1分mysql> update stu set ch=ch+1 order by ch+math desc limit 3;# `Query OK, 3 rows affected (0.00 sec)`# `Rows matched: 3 Changed: 3 Warnings: 0`-- 前3名删除mysql> delete from stu order by ch+math desc limit 3;# `Query OK, 3 rows affected (0.00 sec)`查询语句中的选项distinct查询语句中的选项有两个all显⽰所有数据 [默认]distinct去除结果集中重复的数据-- 显⽰列所有数据MariaDB [sel]> select all math from grades;+------+| math |+------+| 96 || 91 || 94 || 94 |+------+# `4 rows in set (0.001 sec)`-- 单列去除重复的项MariaDB [sel]> select distinct math from grades;+------+| math |+------+| 96 || 91 || 94 |+------+# `3 rows in set (0.001 sec)`。

实验3使用Select语句进行数据查询

实验3使用Select语句进行数据查询

实验3使用Select语句进行数据查询实验3 使用Select 语句进行数据查询一、实验目的1.观察查询结果, 体会 SELECT 语句实际应用;2.要求学生能够在查询分析器中使用 SELECT 语句进行简单查询;3. 熟练掌握简单表的数据查询、数据排序和数据连接查询的操作方法;4. 加深对 SQL 语言的嵌套查询语句的理解;5. 熟练掌握数据查询中的分组、统计、计算和组合的操作方法。

二、实验准备1. 完成实验二,成功建立了基本表;2. 了解简单 SELECT 语句的用法;3. 了解 SELECT 语句的 GROUP BY 和 ORDER BY 子句的作用;4. 了解统计函数和分组统计函数的使用方法。

三、实验要求完成实验,并验收实验结果提交实验报告。

四、实验内容写出相应的语句。

所有的查询全部用 Transact-SQL 语句实现。

1.查询学生的所有信息。

Select *from Student2.查询所有姓…张?的学生的信息。

Select *from Student where StuName like …张%‘3.查询所有姓张的学生的信息,在列标题之间显示3行。

Select *from Student where StuName like …张%‘—h34.查询编号“00000001”的姓名信息。

Select StuNo StuName from Student where StuNo=?00000001?5.查询表“Course”所有信息。

Select * from Course6.查询学生信息前6条记录。

Select top 6 *from Student7.将“Course”表中字段名做以下修改:'课程编码' 替换CouNo …课程名称'替换CouName'教师' 替换Teacher …上课时间'替换SchoolTime'限制选课人数'替换LimitNum …报名人数'替换WIllNum。

实验2SQL语言—SELECT查询操作

实验2SQL 语⾔—SELECT 查询操作实验2 SQL 语⾔—SELECT 查询操作实验⽬的要求掌握SQL 程序设计基本规范,熟练运⽤SQL 语⾔实现数据基本查询,包括单表查询、分组统计查询和连接查询。

掌握SQL 嵌套查询和集合查询等各种⾼级查询的设计⽅法等。

要求学⽣掌握SQL Server 查询分析器和T -SQL 语⾔的使⽤⽅法,熟练掌握和使⽤简单表的数据查询﹑数据排序和数据连接查询﹑嵌套查询等操作⽅法。

实验仪器设备学⽣每个⼀台PC 机已安装SQL Server 环境实验主要内容针对SQL Server 数据库设计各种单表查询语句、分组统计查询语句;设计单个表针对⾃⾝的连接查询,设计多个表的连接查询。

理解和掌握SQL 查询语句各个⼦句的特点和作⽤,按照SQL 程序设计规范写出具体的SQL 查询语句,并调试通过。

针对SQL Server 数据库,正确分析⽤户查询要求,设计各种嵌套查询和集合查询。

本次实验基于图书发⾏数据库系统,进⾏实验实验原理# 单表查询单表查询是指仅涉及⼀个表的查询SELECT ⼦句后⾯不仅可以是表中的属性列,还可以是表达式、字符串常量、函数:取消取值重复的⾏|保留取值重复的⾏将DISTINCT 换成ALL ,不加则默认ALL 换码、通配符 和对⼀个或多个属性列进⾏排序,⼦句| |ASC 升序,DESC 降序聚集函数(放在SELECT 后⾯)GROUP BY ⼦句:将查询结果按某⼀列或多列的值进⾏分组,值相等的为⼀组:作⽤于组,从中选择满⾜条件的组# 连接查询⼀个查询同时涉及两个及以上表的称为连接查询,属性列名前⾯加上表名,即SC.Sno 等值连接查询连接运算符为=时称为等值连接⾮等值连接查询连接运算符不是=时称为⾮等值连接⾃然连接若在等值连接中把⽬标列中重复的属性列去掉则为⾃然连接单个表的⾃⾝连接查询多表连接# 嵌套查询将⼀个查询块嵌套在另⼀个查询块的WHERE ⼦句或者HAVING 短语的条件中的查询称为嵌套查询⼦查询带有IN 谓词的⼦查询带有⽐较运算符的⼦查询带有ANY(SOME)或ALL 谓词的⼦查询带有EXIST 谓词的⼦查询# 集合查询集合操作主要包括并操作UNION 、交操作INTERSECT 和差操作EXCEPT实验记录# 检索L1从书店S1购买的图书的书号及其册数;DISTINCT SELECT DISTINCT LNO %_ESCAPEORDER BY ORDER BY [属性列名] ASC|DESC COUNT(*) --统计元组个数COUNT([DISTINCT|ALL]<列名>) --统计⼀列中值的个数SUM(DISTINCT|ALL]<列名>) --统计⼀列值的总和(必须是数值型)AVG([DISTINCT|ALL]<列名>) --统计⼀列值的平均值(必须是数值型)MAX([DISTINCT|ALL]<列名>) --统计⼀列值的最⼤值MIN([DISTINCT|ALL]<列名>) --统计⼀列值的最⼩值GROUP BY HAVING 查询选修了三门以上课程的学⽣的学号SELECT SNO FROM SC GROUP BY SNO HAVING COUNT(*)>3查询每⼀门课的间接选修课SELECT o,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno=o;查询每个学⽣的学号、姓名、选秀的课程名及成绩(涉及三个表的查询)、SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,CourseWHERE Student.Sno=SC.Sno AND o=o SELECT BNO,QTY FROM 图书发⾏# 检索馆址在“上海”的图书馆及其电话号码;SELECT LNAME,TELFROM 图书馆WHERE CITY='上海';# 检索L4收藏图书的书名;SELECT 图书.BNAMEFROM 图书,图书发⾏WHERE 图书发⾏.LNO='L4'AND 图书发⾏.BNO=图书.BNO;# 检索S3发⾏的图书书名及数量;SELECT 图书.BNAME,图书发⾏.QTYFROM 图书,图书发⾏WHERE 图书发⾏.SNO='S3'AND 图书发⾏.BNO=图书.BNO;# 检索收藏图书“数据库设计”的馆名;SELECT 图书馆.LNAMEFROM 图书馆,图书发⾏,图书WHERE 图书.BNAME='数据库设计'AND 图书.BNO=图书发⾏.BNOAND 图书馆.LNO=图书发⾏.LNO;# 检索没有购买上海新华书店出售的图书的图书馆号LNO;SELECT LNO,LNAMEFROM 图书馆WHERE LNO NOT IN (SELECT 图书发⾏.LNOFROM 图书发⾏,书店WHERE 图书发⾏.SNO=书店.SNO AND书店.SNAME='上海新华书店');思考题如何提⾼数据查询和连接速度。

数据库-数据查询实验报告

实验报告课程名称数据库原理与应用实验名称数据查询系别专业班级指导教师学号姓名实验日期_实验名称:数据查询一、实验目的1.熟悉各种基本的数据查询的含义。

2.掌握数据查询的SQL语句编写方法。

3.能根据要求写出正确的查询语句。

4.掌握基本的调试方法。

二、实验环境1.硬件环境:微机2.软件环境:Windows,Sql server2000或更高版本三、实验内容及步骤题目根据要求编写以下SQL查询语句第一题简单查询1.查询病人表,显示所有病人的病人编号、保险公司名称、电话号码(别名:病人电话)。

2.查询病人表,显示病人编号、病人姓名(病人姓+病人名)、保险公司名称,并在每个“电话号码”前面显示字符串“病人电话:”。

3.查询病人表,要求显示保险公司名称,并消除重复的值。

4.查询病人表,要求只显示前五条的全部病人信息。

5.查询病人表,要求显示最年轻的前6位病人的病人编号,病人姓名,病人年龄6.给医生表取别名:doctors,并显示医生表的所有信息7.要求查询在“人民保险公司”投保的所有病人的信息8.要求查询病人年龄在20~60岁之间的所有病人信息9.要求查询姓“王”、姓“李”或姓“关”的所有病人的信息。

(提示:用“in”或者用“or”两种方法查询。

)10.查询电话号码为空的病人信息11.要求按年龄从大到小显示病人信息12.要求先按病人姓的升序;如果姓一样,再按年龄的降序,来显示病人信息13.要求查询电话号码的最后一个数字为6的病人编号,病人姓名,电话号码14.要求查询倒数第二个数字为7的病人编号,病人姓名,电话号码。

15.要求查询除区号外的第二个数字为2的病人编号,病人姓名,电话号码。

(注:手机号不算。

)16.要求查询电话号码的最后一个数字为6、为3、为1的病人编号,病人姓名,电话号码。

(注:至少两种方法可以实现)17.要求查询电话号码的最后一个数字除1、3、6外的病人编号,病人姓名,电话号码。

步骤(写出以上SQL语句)--1.查询病人表,显示所有病人的病人编号、保险公司名称、电话号码(别名:病人电话)。

数据库的查——select的基本使用

数据库的查——select的基本使⽤--创建学⽣表create table students (id int unsigned not null auto_increment primary key,name varchar(20) default '',age tinyint unsigned default 0,high decimal(5,2),gender enum('男', '⼥', '中性', '保密') default '保密',cls_id int unsigned default 0,is_delete bit default 0);--往students表⾥插⼊数据insert into students values(0,'⼩明',18,180.00,1,1,0),(0,'⼩⽉⽉',19,180.00,1,2,0),(0,'彭于晏',28,185.00,1,1,0),(0,'刘德华',58,175.00,1,2,0),(0,'黄蓉',108,160.00,2,1,0),(0,'凤姐',44,150.00,4,2,1),(0,'王祖贤',52,170.00,2,1,1),(0,'周杰伦⼉',34,null,1,1,0),(0,'程坤',44,181.00,1,2,0),(0,'和珅',55,166.00,1,2,0),(0,'刘亦菲',29,162.00,2,3,0),(0,'⾦星',45,180.00,3,4,0),(0,'静⾹',18,170.00,2,4,0),(0,'郭靖',22,167.00,1,5,0),(0,'周杰',33,178.00,1,1,0),(0,'钱⼩豪',56,178.00,1,1,0),(0,'谢霆锋',38,175.00,1,1,0),(0,'陈冠希',38,175.00,1,1,0); 简单查询:-- 查询所有列 --select * from 表名select * from students;--⼀定条件查询(where)select * from where id=5;-- 查询制定列select id_name from students;-- 使⽤as给字段起别名select id_name as '别名(alias)'select name as '姓名', age as '年龄', high, gender from students;-- 通过表名字段查询 select 库名/表字段/* from students;select * from students;select students.* from students;eg: mysql> select test.students.* from test.students;-- 给表起别名查询select s.id,,s.age from students as s;--消除重复⾏ -- distinctselect distinct age from students;条件查询--⽐较运算符 -- 查询年纪⼤于18岁的信息select * from students where age > 18; --18岁到28岁之间(and)select * from students where age >= 18 and age =< 28;select * from students where age >= 18 || age =< 28;(有时会报错) select * from students where age between 18 and 28 --在18岁以上或者⾝⾼180以上的⼈(or)select * from students where age > 18 or high > 180;  -- 查询年纪等于18岁和年纪等于28的⼈select * from students where age=18 or age=28; 模糊查询:-- like % 替代1个或者多个甚⾄是没有 -- 查询姓名中有‘⼩’的所有名字select * from students where name like '%⼩%'; -- 查询两个字⼈的名字select * from students where name like '_ _';(_代表⼀个字符)  -- 查询⾄少有2个字的名字select * from students where name like '%_ _%';范围查询-- in (1,3,8)表⽰在⼀个⾮连续的范围内 -- 查询年纪为18和34的⼈select * from students where age in (18, 34);select * from students where age=18 or age=34;-- 查询年纪不包含18和34的⼈(取反)select * from students where age not in (18, 34); --查询年龄在17岁到34岁之间的信息select * from students where age between 17 and 34;--查询年纪不在18到34岁的信息select * from students where age not between 17 and 34; 空判断-- 判断is null -- 查询⾝⾼为空的信息select * from students where high is null; -- 判断⾮空is not nullselect * from students where high is not null;排序-- order by 字段(eg:name、age、id)-- asc 从⼩到⼤排列,即升序(不写默认为asc)-- desc 从⼤到⼩排序,即降序 -- 查询年纪在18到34岁之间的男性,按照年纪从⼩到⼤select * from students where gender=1 and age between 18 and 34 order by age;-- 查询年纪在18到34岁之间的⼥性,⾝⾼从⾼到矮select * from students where gender=2 and age between 18 and 34 order by high desc;-- order by 多字段 -- 查询年纪在18到34岁的⼥性,⾝⾼从⾼到矮排序,如果⾝⾼相同的情况下按照年纪从⼩到⼤排序select * from students where age between 18 and 34 and gender=2 order by high desc; -- 按照年纪、⾝⾼排序(如果年纪相同的情况下按照⾝⾼从⼩到⼤排序)select * from students where order by age,high asc; -- 查询年纪在18到34岁的男性,⾝⾼从⾼到矮排序,如果⾝⾼相同的情况下按照年纪从⼩到⼤排序, 如果年龄也相等那么按照id从⼩到⼤排序;select * from students where age between 18 and 34 and gender=1 order by high desc, age, id desc;聚合函数-- 总数-- count -- 查询有多少⼈select count(name/age/high) from students; (统计当前字段,如果要统计的数据为null(空),会出现统计错误,所以⼀般⽤*) -- 查询有多少⼈(并且显⽰中⽂)select count(*) as '总⼈数' from students; -- 查询男性有多少⼈select count(*) from students where gender=1; -- 最⼤值max -- 查询最⼤的年纪select max(age) from students; -- 查询⼥性的最⾼⾝⾼select max(high) from students where gender=2;-- 最⼩值min -- 查询最⾼的⼈select min(high) from students;-- 求和sum -- 计算所有⼈的年龄总和select sum(age) from students;-- 平均值avg -- 计算平均年纪 -- 计算平均年纪 sum(age)/count(*)select sum(age)/count(*) from students;select avg(age) from students; -- 保留2位⼩数select round(avg(age),2) from students;分组(分组的优先级最⾼,⼀条语句中先分组)-- group by -- 按照性别分组,查询所有的性别select gender from students group by gender; -- 计算每组性别的⼈数select gender,count(*) from students group by gender;--group_concat(函数,和group by配合使⽤) -- 查询性别组中的男⼥平均年龄及姓名select gender,group_concat(name),avg(age) from students group by gender;-- having -- 查询每个性别平均年纪超过30岁的性别,以及姓名 having avg(age) > 30 select gender, group_concat(name) from students group by gender having avg(age) > 30; -- 查询每种性别中的⼈数多于4个的组的信息select gender,group_concat(name) from students group by gender having count(*)>4;分页 -- 显⽰5页select * from students limit 5; -- 查询年纪最⼤的⼈名(先按照年纪排序,再分页)select * from students order by age desc limit 1; -- 分页显⽰,每页显⽰2条数据select * from students limit 0,2; -- 按照⾝⾼从⾼到矮排序,查找出所有⼥性,并且分页显⽰,每页显⽰2条数据select * from students where gender=2 order by high desc limit 0,2;。

数据查询Select_V21


数据查询
9.联合查询
使用Union连接多个Select查询语句 例子:从系部表中检索系部名称,从班级 表中检索班级名称 Select 系部名称 From系部表 Union Select 班级名称 From 班级表 注意:这里Select中的列表项的数目必须 相同 – union 合并重复行 – union all 不合并重复行
11.子查询
SELECT不仅能从表或视图中检索数据, 它还能够从其它查询语句所返回的结 果集合中查询数据 例子:检索单科成绩高于全班平均成 绩的学生成绩信息 Select * From chengji Where 成绩> (Select Avg(成绩) From chengji) 例子: Select 课程名称 From kecheng Where 课程编号 IN (Select 课程编 号 From chengji Where 学号 ='000001') 注意:这里的IN 不能换为"=",因 为"="只能对应一个值,而这里返回 多个课程编号
数据查询
注意:select子句的选项列表中可以包
含聚合函数,但子句后的各列或包含 在聚合函数中或包含在group by子句 中,否则出错
5.Having 子句
Having用于限制组或聚合函数的查询条件, 通常用在Group By之后,与Where子句相 似,但是Where是对原始记录进行过滤, Having子句是对查询结果进行过滤, Select和Having子句可以使用聚合函数, 而Where子句中不能有聚合函数 例子:从学生基本信息表中统计汉族学生 的人数 Select 族别 ,COUNT(族别) as '学生人 数' From 学生基本信息表 Group by 族别 Having 族别='汉族' ' 此例子也可以使用where子句完成 Select 族别 ,COUNT(族别) as '学生人 数' From 学生基本信息表 Where 族别='汉族' Group by 族别
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五---SELECT数据查询
实验五、SELECT 数据查询
一、实验目的
要求学生熟练使用T-SQL语句进行数据查询,
掌握SELECT语句的基本结构和多表连接查询、
子查询、分组查询、查询结果的排序等操作。

二、实验内容
(1)利用SELECT查询语句进行单表、多表查询
设计。

(2)利用SELECT语句进行子查询和外连接查
询.

(3)设计ORDER BY查询子句以及带有GROUP BY
的查询子句。

三、实验指导
1、SELECT 基本语句格式
SELECT查询的基本语句包含要返回的列、要
选择的行、放置行的顺序和将信息分组的规范,
其语句格式如下:

2、简单查询实验
利用T-SQL语句在JXGL数据库中实现简单查询
操作:
(1)查询数学系(MA)学生的学号和姓名。


(2)查询选修了课程的学生的学号

(3)查询选修了课程号为“C2”的学生的学号和
成绩,并对查询结果按成绩降序排列,如果成绩
相同则按学号升序排列。
(4)查询选修了课程为“C2”的成绩在80到
90分之间的学生的学号和成绩,并将成绩乘以
0.8输出。

(5)查询数学系(MA)或计算机科学系(CS)
中张的学生信息
(6)查询缺少了成绩的学生学号和课程号
3、连接查询实验
利用T-SQL语句在JXGL数据库中实现下列连接查询:
(1) 查询每个学生的情况以及他(她)所选修的课程

(2) 查询学生的学号、姓名、选修的课程名及成绩
(3) 查询选修“离散数学”课程且成绩为90分以上的学号、姓名及成绩。
(4) 查询每一门课的间接先修课(即先修课的先
修课)

4、嵌套查询
利用T-SQL语句在JXGL数据库中实现下列嵌套查询操作:
(1)查询选修了“离散数学”的学生的学号和姓名。
(2)查询课程号为“C2”、成绩高于张林的学生的学号和成绩
(3)查询其他系中年龄小于计算机科学系(cs)中年龄最大者的学生
(4)查询其他系中比计算机科学系(cs)中学生年龄都小的学生
(5)查询和“王洪敏”的“数据库原理及应用”课程分数相同的学生的学号。
(6)查询选修了“c2”课程的学生的姓名
(7)查询没有选修“C2”课程 的学生的姓名
5、组合查询和统计查询
利用T-SQL语句在JXGL数据库中实现下列数据组合查询和统计查询操作
(1)查询选修了“计算机基础”课程的比此课程的平均成绩大的学生的学
号和成绩。
(2)查询选修了“计算机基础”课程的学生的平均成绩。
(3)查询年龄大于女同学平均年龄的男的同学的姓名和年龄
(4)列出各系学生的总人数,并按人数进行降序排列。
(5)统计各系各门课程的平均成绩。

(6)查询选修了“计算机基础”和“离散数学”的学生的学号和平均成绩。

相关文档
最新文档