第三课、数据库的基本查询

一、课程介绍

  1.1 课程介绍

学习目标

  • 数据的简单查询

    • 无条件查询记录,字段的计算和字段的别名
  • 数据的高级查询
    • 数据排序、分页、去除重复记录
  • 数据的有条件查询
    • 条件表达式:数学运算符、比较运算符、逻辑运算符、按位运算符

二、数据操作语言的基本操作

  2.1 数据表的基本查询

数据操作语言:普通查询

记录查询

  • 最基本的查询语句是由SELECT和FROM关键字组成的

    • SELECT * FROM t_emp;
    • SELECT empno,ename,sal FROM t_emp;
  • SELECT语句屏蔽了物理层的操作,用户不必关心数据的真实储存,交由数据库高效的查找数据

使用列别名

  • 通常情况下,SELECT子句中使用了表达式,那么这列的名字就默认为表达式,因此需要一种对列名重命名的机制

    • SELECT empno,sal*12 as "income" FROM t_emp;

查询语句的字句执行顺序

  1. 词法分析与优化——读取SQL语句
  2. FROM——选择数据来源
  3. SELECT——选择输出内容·

  2.2 如何让数据分页展示

数据操作语言:数据分页

数据分页

  • 比如我们查看朋友圈,只会加载少量部分信息,不用一次性加载全部朋友圈,那样只会浪费CPU时间、内存和网络宽带
  • 如果结果的记录很多,则可以使用LIMIT关键字限定结果集数量。
    • SELECT ...... FROM ...... LIMIT 起始位置,偏移量;
    • SELECT empno,ename FROM t_emp LIMIT 0,5;

数据分页的简写用法

  • 如果LIMIT子句只有一个参数,它表示的是偏移量,起始值默认为0

    • SELECT empno,ename FROM t_emp LIMIT 5;
    • SELECT empno,ename FROM t_emp LIMIT 0,5;
  • 顺序:FROM-->SELECT-->LIMIT

  2.3 如何对查询结果集进行排序

结果集排序

  • 如果没有设置,查询语句不会对结果集进行排序。也就是说,如果想让结果集按照某种顺序排列,就必须使用ORDER BY子句。

    • SELECT ...... FROM ......ORDER BY 列名 [ASC|DESC];
    • SELECT empno,ename FROM t_emp ORDER BY sal;

排序关键字

  • ASC代表升序(默认),DESC代表降序
  • 如果排序列是数字类型,数据库就按照数字大小排序,如果是日期类型就按照日期大小排序,如果是字符串就按照字符集序号排序。

排序字段内容相同的情况

  • 默认情况下,如果两条数据排列字段内容相同,那么排序会是什么样子?(默认按主键升序排列)

多个排序字段

  • 我们可以使用ORDER BY 规定首要排序条件和次要排序条件。数据库会按照首要排序条件排序,如果遇到首要排序内容相同的记录,那么就会启用次要排序条件接着排序

排序+分页

  • ORDER BY子句书写的时候放在LIMIT子句的前面
  • 顺序:FROM-->SELECT-->ORDER BY-->LIMIT

  2.4 如何去除结果集中的重复记录

数据操作语言:去除重复记录

结果集中的重复记录

  • 假如我们要查询员工表有多少种职业,写出来的SQL语句如下:

    • SELECT job FROM t_emp;

去除重复记录

  • 如果我们需要去除重复的数据,可以使用DISTINCT关键字来实现

    • SELECT DISTINCT 字段 FROM ......;
    • SELECT DISTINCT job FROM t_emp;

注意事项

  • 使用DISTINCT的SELECT子句中只能查询一例数据,如果查询多列,去除重复记录就会失效。

    • SELECT DISTINCT job,ename FROM t_emp;(X)
  • DISTINCT关键字只能在SELECT子句中使用一次
    • SELECT DISTINCT job,DISTINCT ename FROM t_emp;(X)
    • SELECT job,DISTINCT ename FROM t_emp;(X)

三、条件查询

  3.1 条件查询的语句

数据操作语言:条件查询(一)

条件查询

  • 很多时候,用户感兴趣的并不是逻辑表里的全部记录,而只是他们当中能够满足某一种或某几种条件的记录。这类条件要用WHERE子句来实现数据的筛选

    • SELECT......FROM......WHERE 条件 [AND|OR] 条件 ......;
    • SELECT empno,enamel,sal FROM t_emp WHERE deptno=10 AND sal>=2000;

四类运算符

  • WHERE语句中的条件运算会用到以下四种运算符:

    • 符号 运算符
      1 数学运算符
      2 比较运算符
      3 逻辑运算符
      4 按位运算符

  算术运算符

  • 序号 表达式 意义 例子
    1 + 加法 1+2+3
    2 - 减法 1-2-3
    3 * 乘法 5*35
    4 / 除法 231/15
    5 % 求模 10%3

  比较运算符

  • 序号 表达式 意义 例子
    1 > 大于 age>18
    2 >= 大于等于 age>=18
    3 < 小于 sal<3000
    4 <= 小于等于 sal<=3000
    5 = 等于 deptno=10
    6 != 不等于 deptno!=30
    7 IN 包含 deptno IN (10,30,40)
    8 IS NULL 为空 comm IS NULL
    9 IS NOT NULL 不为空 comm IS NOT NULL
    10 BETWEEN AND 范围 sal BETWEEN 2000 AND 3000
    11 LIKE 模糊查询 ename LIKE "A%"
    12 REGEXP 正则表达式 ename REGEXP "[a-zA-Z]{4}"

  逻辑运算符

  • 序号 表达式 意义 例子
    1 AND age > 18 AND sex = “男”
    2 OR empno = 8000 OR deptno = 20
    3 NOT NOT deptno = 20
    4 XOP 异或 age > 18 XOR sex = "男"

  按位运算符

  • 序号 表达式 意义 例子
    1 & 位与关系 3&7
    2 | 位或关系 3|7
    3 ~ 位取反 ~10
    4 ^ 位异或 3^7
    5 << 左移 10<<1
    6 >> 右移 10>>1

二进制按位运算

  • 二进制位运算的实质是将参与运算的两个操作数,按对应的二进制数逐位进行逻辑运算。

WHERE子句的注意事项

  • WHERE子句中,条件执行的顺序是从左到右的。所以我们应该把索引条件,或者筛选掉记录最多的条件写在最左侧
  • 执行顺序
    • FROM->WHERE->SELECT->ORDER BY->LIMIT

四、课程总结

  4.1 课程总结

技能清单

  • 掌握了SELECT子句中的列别名和去除重复记录
  • 掌握了数据排序语法
  • 掌握了数据分页的语法
  • 掌握有条件查询的语法和运算符

【python】第二模块 步骤一 第三课、数据库的基本查询的更多相关文章

  1. MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法

    在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应 ...

  2. oracle,mysql,SqlServer三种数据库的分页查询的实例。

    MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如 ...

  3. oracle,mysql,SqlServer三种数据库的分页查询

    MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如 ...

  4. Python实战 :2017国考职业表excel转数据库,再查询生成excel

    最近看2017年国考的职业表,多而杂,不好过滤我想要的信息,特此把它转成Sqlite3数据库,再从数据库里把查询结果导出成excel,方便找职业. (后附上整套代码) 环境:python2.7   x ...

  5. Python 第二模块学习总结

    学习总结: 1.掌握对装饰器的用法 2.掌握生成器的用法 3.掌握迭代器的用法 4.熟悉Python内置函数 5.熟悉Python shutil/shelve/configparse/hashlib/ ...

  6. python 安装模块步骤

    1.下载 pyocr-0.4.1.tar.gz   tar.gz文件  解压  放到 c:/python27 文件夹下面 C:\Python27\pyocr-0.4.1  直接 cmd 命令 进入   ...

  7. python基础-------模块与包(三)正则表达式

    re模块正则表达式 正则表达式常用符号: [ re模块使用方法]: match(string[, pos[, endpos]]) | re.match(pattern, string[, flags] ...

  8. Python第二模块(文件和函数)

    1. 集合操作    集合的特点:无序,不重复的数据组合 集合的作用: 去重,将列表变为集合,就会自动去重 关系测试,测试两组数据之间的交集.差集.并集关系 常用操作: #创建集合 s = {1,2, ...

  9. Python命令模块argparse学习笔记(三)

    参数组 ArgumentParser.add_argument_group(title=None, description=None) 默认情况下,当显示帮助消息时,ArgumentParser将命令 ...

  10. MongoDB创建表步骤,Mongo常用的数据库操作命令,查询,添加,更新,删除_MongoDB 性能监测

    ->use Admin         (切换到创建用户) ->db.TestDb          (创建数据库) ->db.addUser(“userName”,”Pwd”)   ...

随机推荐

  1. [转载] Image Types

    转载自https://www.mathworks.com/help/matlab/creating_plots/image-types.html Image Types Indexed Images ...

  2. tool script to convert back slash

    Back slash is used in windows, which makes so many headache for me. Then an idea came to my mind. It ...

  3. Linux 查找并杀死进程

    1.查找包含java的所有进程 ps -ef | grep java 2.根据端口号查看进程号 lsof -i:8080 sudo lsof -i:8080 3.杀死进程 kill -9 proces ...

  4. Vue + Element table中的某行触发enter事件后,使该行disabled

    废话不罗嗦,上硬菜. 1.html下: <el-table-column label="名称" sortable> <template slot-scope=&q ...

  5. noi 2.1基本算法之枚举

    7647:余数相同问题 1.描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同. 请问满足上述条件的x的最小值是多少? 数据保证x有解. 2.输入 ...

  6. codeforces 165C Another Problem on Strings 二分or双指针

    题意:给一个01字符串s,找出s包含恰好k个1的连续字串个数 解法: 显然是简单的双指针or二分的题,但由于k=0的存在,使得双指针的边界条件十分难写,所以应该选择二分! #include<bi ...

  7. git切换到某个tag

    git checkout tags/some_tag_name -b a_new_branch_name

  8. CentOS 6.7 hadoop free版本Spark 1.6安装与使用

    最近的工作主要围绕文本分类,当前的解决方案是用R语言清洗数据,用tm包生成bag of words,用libsvm与liblinear训练模型.这个方案可以hold住6/70万的训练集: LIBLIN ...

  9. db2存储过程很慢如何查看

    存储过程很慢 ,如何处理? #查看包的情况select r.routineschema, r.routinename, r.routinemodulename, rd.bname as package ...

  10. fatal error: openssl/ssl.h: No such file or director

    $ sudo apt-get install libssl-dev