关系数据库SQL数据查询(超全的查询案例)

数据查询

一、单表查询

1.查询仅涉及一个表,选择表中的若干列

用到的数据——>点这里下载数据
查询指定列

[例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; 

查询经过计算的值

  • SELECT子句的<目标列表达式>不仅可以为表中的属性列,也可以是表达式

     [例4]  查全体学生的姓名及其出生年份。
     SELECT Sname,2014-Sage          /*假设当时为2014年*/
     FROM Student;
     输出结果:
                 Sname   2014-Sage
                    李勇         1994
                    刘晨         1995
                    王敏         1996
                    张立         1995 
    

使用列别名改变查询结果的列标题:

	     SELECT Sname NAME,'Year of Birth:'  BIRTH,
	       2014-Sage  BIRTHDAY,LOWER(Sdept)  DEPARTMENT
		FROM Student;
	输出结果:
	    NAME      BIRTH         BIRTHDAY   DEPARTMENT
	   
	     李勇    Year of Birth:    1994             cs
	     刘晨    Year of Birth:    1995             cs
	     王敏    Year of Birth:    1996             ma
	     张立    Year of Birth:    1995             is

2.选择表中的若干元组

消除取值重复的行
如果没有指定DISTINCT关键词,则缺省为ALL

	[例5]  查询选修了课程的学生学号。
	    SELECT Sno   FROM SC;
		等价于:
		SELECT ALL  Sno  FROM SC;
		执行上面的SELECT语句后,结果为: 
						    Sno
	
						201215121
						201215121
						201215121
						201215122
						201215122

指定DISTINCT关键词,去掉表中重复的行

	   SELECT DISTINCT Sno
	    FROM SC; 
	
	    执行结果:
						    Sno
	
						201215121
						201215122

常用的查询条件:
在这里插入图片描述

1. 比较大小:

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

2. 确定范围:
谓词: BETWEEN … AND …
NOT BETWEEN … AND …

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

3. 确定集合:
谓词:IN <值表>, NOT IN <值表>

	[例11]查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别。
		SELECT Sname, Ssex
		FROM  Student
		WHERE Sdept IN ('CS','MA’,'IS' );
	
	[例12]查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别。
		SELECT Sname, Ssex
		FROM Student
		      WHERE Sdept NOT IN ('IS','MA’,'CS' );

4. 字符匹配:

  • 谓词: [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <换码字符>’]

  • <匹配串>可以是一个完整的字符串,也可以含有通配符%和 _

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

    • 例如a%b表示以a开头,以b结尾的任意长度的字符串
  • _ (下横线) 代表任意单个字符。

    • 例如a_b表示以a开头,以b结尾的长度为3的任意字符串
     匹配串为固定字符串
     
     [例13]  查询学号为201215121的学生的详细情况。
           SELECT *    
          FROM  Student  
          WHERE  Sno LIKE ‘201215121';
     
     等价于: 
            SELECT  * 
           FROM  Student 
           WHERE Sno = ' 201215121 ';
    
    
    
     匹配串为含通配符的字符串
     [例14]  查询所有姓刘学生的姓名、学号和性别。
            SELECT Sname, Sno, Ssex
           FROM Student
           WHERE  Sname LIKE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎明之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值