数据库 - 数据查询

数据查询

语句格式
       SELECT [ALL|DISTINCT] <目标列表达式>
                                                [,<目标列表达式>] …
FROM <表名或视图名>[, <表名或视图名> ] …
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ];

选择表中的若干列

查询指定列
    [例1]  查询全体学生的学号与姓名。
        SELECT Sno,Sname
        FROM Student; 

    [例2]  查询全体学生的姓名、学号、所在系。
        SELECT Sname,Sno,Sdept
        FROM Student;

全部查询列

选出所有属性列:
在SELECT关键字后面列出所有列名
将<目标列表达式>指定为 *

[例3]  查询全体学生的详细记录。
SELECT  Sno,Sname,Ssex,Sage,Sdept
FROM Student;
   或
SELECT  *
FROM Student;

查询经过计算的值

[例4]  查全体学生的姓名及其出生年份。
SELECT Sname,2004-Sage    /*假定当年的年份为2004年*/
FROM Student;
使用列别名改变查询结果的列标题:

     SELECT Sname NAME,‘Year of Birth: ’  BIRTH,
       2000-Sage  BIRTHDAY,LOWER(Sdept)  DEPARTMENT
    FROM Student;

比较大小

例7]  查询计算机科学系全体学生的名单。
    SELECT Sname
    FROM Student
    WHERE Sdept=‘CS’;
[例8]  查询所有年龄在20岁以下的学生姓名及其年龄。
     SELECT Sname,Sage
FROM    Student
WHERE Sage < 20;
[例9]  查询考试成绩有不及格的学生的学号。
    SELECT DISTINCT Sno
    FROM  SC
    WHERE Grade<60;

确定范围

谓词:   BETWEEN …  AND  …
                 NOT BETWEEN  …  AND  …
[例10] 查询年龄在20~23岁(包括20岁和23岁)之间的学生的
             姓名、系别和年龄
      SELECT Sname,Sdept,Sage
FROM     Student
WHERE   Sage BETWEEN 20 AND 23;
[例11]  查询年龄不在20~23岁之间的学生姓名、系别和年龄
           SELECT Sname,Sdept,Sage
           FROM    Student
           WHERE Sage NOT BETWEEN 20 AND 23;

确定集合

谓词:IN <值表>,  NOT IN <值表>
[例12]查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。
    SELECT Sname,Ssex
    FROM  Student
    WHERE Sdept IN ( ‘IS‘,‘MA‘,‘CS‘ );
[例13]查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。
SELECT Sname,Ssex
FROM Student
     WHERE Sdept NOT IN ( ‘IS‘,‘MA‘,‘CS‘ );

字符匹配

谓词: [NOT] LIKE  ‘<匹配串>’  [ESCAPE ‘ <换码字符>’]
匹配串为固定字符串
[例14]  查询学号为200215121的学生的详细情况。
     SELECT *
     FROM  Student
     WHERE  Sno LIKE ‘200215121‘;
等价于:
      SELECT  *
      FROM  Student
      WHERE Sno = ‘ 200215121 ‘;
 2) 匹配串为含通配符的字符串
[例15]  查询所有姓刘学生的姓名、学号和性别。
      SELECT Sname,Sno,Ssex
      FROM Student
      WHERE  Sname LIKE ‘刘%’;

[例16]  查询姓"欧阳"且全名为三个汉字的学生的姓名。
      SELECT Sname
      FROM   Student
      WHERE  Sname LIKE ‘欧阳__‘;
[例17]  查询名字中第2个字为"阳"字的学生的姓名和学号。
      SELECT Sname,Sno
      FROM Student
      WHERE Sname LIKE ‘__阳%’;

[例18]  查询所有不姓刘的学生姓名。
      SELECT Sname,Sno,Ssex
      FROM Student
      WHERE Sname NOT LIKE ‘刘%‘;
3) 使用换码字符将通配符转义为普通字符

 [例19]  查询DB_Design课程的课程号和学分。
      SELECT Cno,Ccredit
      FROM Course
      WHERE Cname LIKE ‘DB\_Design‘ ESCAPE ‘\‘;

[例20]  查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况。
      SELECT  *
      FROM   Course
      WHERE  Cname LIKE  ‘DB\_%i_ _‘ ESCAPE ‘ \ ‘;

 ESCAPE ‘\‘ 表示“ \” 为换码字符

涉及空值的查询

谓词: IS NULL 或 IS NOT NULL
 “IS” 不能用 “=” 代替
      [例21]  某些学生选修课程后没有参加考试,所以有选课记录,但没
      有考试成绩。查询缺少成绩的学生的学号和相应的课程号。
     SELECT Sno,Cno
      FROM  SC
      WHERE  Grade IS NULL
[例22]  查所有有成绩的学生学号和课程号。
      SELECT Sno,Cno
      FROM  SC
      WHERE  Grade IS NOT NULL;

多重条件查询

逻辑运算符:AND和 OR来联结多个查询条件

AND的优先级高于OR

可以用括号改变优先级

可用来实现多种其他谓词

[NOT] IN

[NOT] BETWEEN … AND …

[例23]  查询计算机系年龄在20岁以下的学生姓名。
     SELECT Sname
       FROM  Student
       WHERE Sdept= ‘CS‘ AND Sage<20;
改写[例12]
[例12]  查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN ( ‘IS‘,‘MA‘,‘CS‘ )
可改写为:
SELECT Sname,Ssex
FROM   Student
WHERE  Sdept= ‘ IS ‘ OR Sdept= ‘ MA‘ OR Sdept= ‘ CS ‘;

ORDER BY子句

ORDER BY子句
可以按一个或多个属性列排序
升序:ASC;降序:DESC;缺省值为升序
当排序列含空值时
ASC:排序列为空值的元组最后显示
DESC:排序列为空值的元组最先显示
[例24]  查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。
        SELECT Sno,Grade
        FROM  SC
        WHERE  Cno= ‘ 3 ‘
        ORDER BY Grade DESC;
[例25]  查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
        SELECT  *
        FROM  Student
        ORDER BY Sdept,Sage DESC;

聚集函数

聚集函数:
计数
COUNT([DISTINCT|ALL] *)
COUNT([DISTINCT|ALL] <列名>)
计算总和
SUM([DISTINCT|ALL] <列名>)
 计算平均值
AVG([DISTINCT|ALL] <列名>)
最大最小值
     MAX([DISTINCT|ALL] <列名>)
     MIN([DISTINCT|ALL] <列名>)
 [例26]  查询学生总人数。
    SELECT COUNT(*)
    FROM  Student;
     [例27]  查询选修了课程的学生人数。
     SELECT COUNT(DISTINCT Sno)
     FROM SC;
     [例28]  计算1号课程的学生平均成绩。
          SELECT AVG(Grade)
          FROM SC
          WHERE Cno= ‘ 1 ‘;
 [例29]  查询选修1号课程的学生最高分数。
   SELECT MAX(Grade)
   FROM SC
   WHER Cno= ‘ 1 ’;

 [例30]查询学生200215012选修课程的总学分数。
              SELECT SUM(Ccredit)
             FROM  SC, Course
             WHER Sno=‘200215012‘ AND SC.Cno=Course.Cno;

GROUP BY

GROUP BY子句分组:

细化聚集函数的作用对象

未对查询结果分组,聚集函数将作用于整个查询结果

对查询结果分组后,聚集函数将分别作用于每个组

作用对象是查询的中间结果表

按指定的一列或多列值分组,值相等的为一组

[例31]  求各个课程号及相应的选课人数。
     SELECT Cno,COUNT(Sno)
     FROM    SC
     GROUP BY Cno;
[例32]  查询选修了3门以上课程的学生学号。
     SELECT Sno
     FROM  SC
     GROUP BY Sno
     HAVING  COUNT(*) >3;

HAVING短语与WHERE子句的区别:

作用对象不同

WHERE子句作用于基表或视图,从中选择满足条件的元组

HAVING短语作用于组,从中选择满足条件的组。

时间: 2024-08-08 01:33:42

数据库 - 数据查询的相关文章

Extjs分页使用java实现数据库数据查询

关于Ext分 页功能的实现.项目用的是js.Ext.servlet.下面贴下代码: var obj = this; var pageSize = 20;   //统计结果分页每一页显示数据条数 //在这里使用Store来创建一个类似于数据表的结构,因为需要远程获取数据,所以应该使用 //HttpProxy类,我是从后台读取的是json数据格式的数据,所以使用JsonReader来解析: var proxy = new Ext.data.HttpProxy({ url:"com.test.chec

sql server数据库数据查询成功

1 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 2 <%@ page import="java.sql.*" %> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &q

Chapter 1. Ado.Net 数据库数据查询(多行、多列)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; //引用命名空间 namespace Ado.net数据库增删改查 { class Program { static void Main(string[] args) { //1.数据库连接 SqlConnection conn = new SqlConnection(

50.数据库数据查询例题

截图 表名称以此为course,teacher,class,score,student 代码 calss 表 create table class( cid int primary key auto_increment, caption varchar(20) not null ); insert into class values('1', '三年二班'), ('2', '三年三班'), ('3', '一年二班'), ('4', '二年九班'); teacher表 create table t

数据库 简单的数据查询

简单的数据查询 1.查询的基本结构: select[distinct] */列名 from table 表名 [where condition] [order by] 2.投影的操作:指定查询结果中能够显示的列 语法:select 列名列表 from 表名; (1):选择多列查询,列名之间用“,”隔开 (2):单列时,只单个. (3):若选择所有列,则用*代替. 3.表名前缀:本列无多大意义,但在复杂的多表查询的情况下,很有用. 语法:select 列名表名 from 表名; 4.列别名(as)

19 MySQL概念 数据库 数据表 数据类型 增加删除修改查询 WHERE Order By Limit

数据库管理系统DBMS 数据库中相关概念 数据库 数据表 记录 字段 数据 登录和退出MySQL客户端 查询自己的MySQL服务器有几个数据库 二.退出MySQL客户端的命令 修改root用户的密码 在MySQL客户端来修改密码(当前账号的密码) 数据库操作 创建数据库 显示所有数据库 删除数据库 选择数据库 更改数据库默认字符集 数据表操作 显示当前数据库中的所有表 创建数据表 显示表的创建 列的常用属性 修改数据表 删除数据表 显示表结构 MySQL数据类型 整型 浮点型 字符型 文本型 日

sql数据库中查询第几条到第几条的数据

通用方法: select top 500 * from (select top 1000 * from UserSearchDatas order by ID) a order by ID desc sql数据库中查询第几条到第几条的数据,布布扣,bubuko.com

数据库基本操作(二)--数据查询

//数据查询 create database JXGL; //创建数据库 use JXGL;//使用数据库 create table S( Sno char(10) not null unique, Sname char(20) not null unique, Ssex char(2), Sage int, Sdept char(20)); create table C( Cno char(2) not  null primary key (Cno), Cname char(20), Teac

jmeter JDBC Request (查询数据库获取数据库数据) 的使用

JDBC Request 这个Sampler可以向数据库发送一个jdbc请求(sql语句),并获取返回的数据库数据进行操作.它经常需要和JDBC Connection Configuration配置原件(配置数据库连接的相关属性,如连接名.密码等)一起使用. 一.准备工作 1.本文使用的是mysql数据库进行测试,数据库的用户名为root(你自己的用户名),用户名密码为*********(你自己的密码) 2.数据库中有表:test,表的数据结构如下: 表中数据如下: select * from