SQL之单表查询

2023-05-16

SQL之单表查询(1)

  • SQL之单表查询(1)
    • SQL查询之选择表中的若干列(投影运算)
      • **查询表中所有或指定属性**
      • 使用函数获取表中不存在属性
    • SQL中的选择运算
      • 比较运算
      • 确定集合
      • 字符匹配
      • 空值

数据库查询是数据库的核心操作,SQL提供了 select 语句进行数据库查询。

通常的select 的子句所完成的功能类似于关系代数中的投影运算,而where的子句的功能类似于关系运算中的选择运算

SQL查询之选择表中的若干列(投影运算)

关系代数中的投影运算,对应于SQL中利用select子句指定属性的功能,与关系代数不同的是,SQL语句的投影运算默认获得投影列上的所有元组(包括所有的重复元组)。

🌰举个栗子

查询所有学生的选课情况

select * from sc;

那么对应的,假如我们要在一组数据中不重复地取一次数据,那我们该怎么办呢?

这时候就就可以使用distinct来对重复数据进行去重。

🌰举个栗子

查询选了课的学生学号。

select distinct sno from sc;

查询表中所有或指定属性

基本语法结构:

select 属性1, 属性2,属性3,属性4 from 表;

或使用 通配符 ' * '简化输出,如下:

select * from 表;

🌰举个栗子

使用通配符 '*'型:

查询学生表中全体学生的详细记录

select * from s;

逐一列举属性(列名)型:

查询所有学生的姓名以及年龄

select sname,age from s;

使用函数获取表中不存在属性

使用select语句不仅可以选择出表中存在的列值,而且可以通过对列值进行计算得到表中不存在的信息

基本语法结构

select 函数或计算公式 from 表;

注意

我们在使用了函数或者计算公式得到的新数据我们的系统会生成默认字段,此时的新字段往往会晦涩难懂。因此我们可以使用关键子 as 来对新数据列名进行命名,以提高我们数据库的可读性。

🌰举个栗子

查询所有学生的学号,姓名和出生年份,并在查询结果中修改列表题分别为“学号”、“姓名”和“出生年份”。

select sno as 学号,sname as 姓名,year(now()) - age as 出生年份 from s;

说明:

year()和now()是MySQL中处理日期和时间的函数,now()返回为获取当前日期时间,year()为返回指定日期中的年,因此year(now())是获得当前年份。

SQL中的选择运算

查询满足指定条件的元组可以通过where子句来实现。

where子句常用的查询条件如下表:

查询条件谓词
比较= 、<>、>、<、>=、<=
算术运算+、-、*、/
确定范围between、and、not between and
确定集合in、not in
字符匹配like、not like
空值is null、is not null
多重条件and,or

比较运算

基本语法结构

select 属性一,属性二 from 表 where 比较条件;

🌰举个栗子

查询学分为64的课程号和课程名。

select cno,cname from c where credit = '64';

查询年龄小于22的学生信息。

select * from s where age <'22';

查询计算机系男生的学号和姓名。

select sno,sname from s where sdept = '计算机' and sex = '男';

确定集合

基本语法结构

select 属性一,属性二,属性三 from 表 where 属性一 in ('数据元素一','数据元素二');

🌰举个栗子

查询电信、外国语、经管系的女生信息。

 select * from s where sdept in('电信','外国语','经管系') and sex = '女';

查询年龄大于22的姓张的同学的学号和姓名。

 select sno,sname from s where age > 22 and sname like '张%';

查询成绩在85-100之间的选课信息。

select * from sc where grade between 85 and 100;

字符匹配

基本语法结构

select 属性 from 表 where 属性 like '需匹配的字符%';

🌰举个栗子

查询课程名中带有“网络”的课程号和课程名。

select cno,cname from c where cname like '网络%';

查询姓名中第二个字是“小”的学生基本信息。

select * from s where sname like '_小%';

假如,用户需要查询的匹配字符串中本身就含有"%“或者”_"时,我们就可以采用escape’ \ ',对通配字符进行转义。

🌰举个栗子

查找课程名是DB_Design课程的课程号、课程性质。

select 课程号,课程性质 from 课程 where 课程名 like 'DB\_Design' escape'\';

==escape’ \ '==短语表示“\”为转义字符,这样匹配串紧跟在“\”后面的字符“_”就不在具有通配符的含义。

空值

基本语法结构

select 属性一,属性二 from 表 where 属性一 is null;

🌰举个栗子

查询成绩为空的学号和课程号

select sno,cno from sc where grade is null;

强调:这里的 is 不能使用(=)来代替

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL之单表查询 的相关文章

  • SQL 表别名 - 好还是坏? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在 SQL 中使用表别名有哪些优点和缺点 我个人会尽量避免使用它们 因为我认为它们会使代码的可读性降低 特别是在阅读大型 where and 语
  • Template_searchpath 在 Airflow 中给出 TemplateNotFound 错误并且找不到 SQL 脚本

    我有一个这样描述的 DAG tmpl search path home airflow gcs sql requests with DAG dag id pipeline default args default args template
  • SQL - 选择具有最大值的所有行

    我有这个 SQL 查询 SELECT id COUNT AS price FROM SELECT FROM rt WHERE somecondition AS st JOIN tt ON st id tt id GROUP BY id 现在
  • 高级 MySQL:查找民意调查响应之间的相关性

    我有四个 MySQL 表 users 身份证号 姓名 polls ID 文本 options id poll id 文本 回应 id poll id 选项 id 用户 id 给定一个特定的民意调查和一个特定的选项 我想生成一个表格 显示其他
  • 将 Linq 表达式转换为 SQL Server 查询

    我正在使用一些 crm 框架 该框架没有任何内部 orm 并且不使用实体框架 仅使用纯 sql 查询 我在数据库中的每个表都有实体 所以我有例如 public class Customer public string FirstName g
  • 是否可以在 Hibernate 中使用分析函数?

    有没有办法在 Hibernate 中使用类似 sql server 的分析函数 就像是 select foo from Foo foo where f x max f x over partition by f y 您正在寻找本机 SQL
  • 如何编写一个简单的版本控制系统?

    我想做一个简单的版本控制系统 但我不知道如何构建我的数据和代码 这是一个简短的例子 用户登录 User has two options when uploading a file 提交新文件 提交文件的新版本 用户应该能够看到树 版本不同
  • 获取每件商品的最新价格

    我有一张桌子 ItemID PurchaseDate Price 001 03 17 2013 19 00 002 03 17 2013 14 00 001 03 18 2013 13 00 002 03 18 2013 15 00 001
  • 将记录与另一个表上的最新记录连接

    我正在尝试创建一个 SQL 视图 我如何从一个表中选择最新的记录 而其他记录保持原样 我需要从所有表中选择所有记录 这工作正常 但我需要仅按日期选择最新的提案 这是我遇到的问题 这是我到目前为止所拥有的 SELECT TOP 100 PER
  • 带可选参数的 SQL 更新命令?

    我将大约 500 000 个对象插入数据库 其中许多对象是相同的 在数据库中具有相同的主键表示 但其他字段可能不同 因此我使用方法 更新 如果没有行受影响 插入 问题是 有时一个对象的某些字段设置为 null 从文件中无法读取 并且已经在数
  • SQL查询3个表,无法得到所需的结果

    列出所有已售出的作品以及艺术家 订购日期和发货日期 SELECT title artist order date ship date FROM items orders orderline WHERE orders order id ord
  • 在 SQL 中查询行序列

    假设我正在存储events有关联users如下表 其中dt代表事件的时间戳 dt user event 1 1 A 2 1 D 3 1 B 4 1 C 5 1 B 6 2 B 7 2 B 8 2 A 9 2 A 10 2 C 这样我们就可以
  • 排除任何字段中具有 NULL 值的行结果?

    我有一个像这样的简单选择 SELECT FROM table WHERE fk id 10020 它可以工作 但有一些字段为 NULL 没有模式所以做了 SELECT FROM table WHERE fk id 10020 AND NOT
  • 将表与同一个表的前一条记录连接起来

    我有一个包含历史记录的表 由主表中的多个触发器发布到那里 我想在历史表上创建一个 select 语句 其中每个记录都由其先前的记录 由相同的 LineID 和最高的 ActionDate 标识 连接 这样我就可以提取这两者之间的差异 我尝试
  • 在两个以上的表上使用内联接删除查询

    我想使用两个以上表上的内联接从表中删除记录 假设我有表 A B C D 其中 A 的 pk 在所有其他提到的表中共享 然后如何编写删除查询以使用表 B 和 A 上的内联接从表 D 中删除记录 因为条件是从这两个表中获取的 我需要从 DB2
  • 我应该如何优化 .net 代码中对一个简单存储过程的多次调用?

    我有一个非常简单的存储过程 create procedure spFoo v varchar 50 as insert into tbFoo select v 我有 50 个值要插入到 tbFoo 中 这意味着在我的 c 代码中我调用 sp
  • 找出会话的默认 SQL Server 架构

    我需要知道正在执行某些 DDL 的 SQL 脚本中当前的默认架构是什么 我不需要设置架构 但我确实需要将对它的引用 名称或 ID 放入变量中 该脚本可能以 Windows 登录身份运行 因此以下内容还不够 SELECT name defau
  • 使用存储过程访问数据可以提供哪些安全优势?

    我看到一些指南建议您通过存储过程对所有数据访问进行分层来保护数据库 我知道对于 SQL Server 您可以保护表甚至列免受 CRUD 操作的影响 例如 Logged in as sa USE AdventureWorks GRANT SE
  • 如何编辑表以启用级联删除?

    我有一个代表用户的表 当用户被删除时我得到 DELETE 语句与 REFERENCE 约束冲突 显然 CASCADE DELETE在SQL Server中并不像我想象的那么容易 需要将选项添加到表中 问题是 我不知道如何添加CASCADE
  • 对 SQL Server 2005 结果进行分页

    如何在 SQL Server 2005 中对结果进行分页 我在 SQL Server 2000 中尝试过 但没有可靠的方法来做到这一点 我现在想知道SQL Server 2005是否有任何内置方法 分页的意思是 例如 如果我按用户名列出用户

随机推荐