• MySQL【基本select语句】


    目录

    1. SQL的分类

    2.SQL语言的规则和规范

    2.1 SQL的规则

    2.2 SQL大小写规范 (建议遵守) 

    2.3 注 释 

    2.4 命名规则

     2.5 数据导入指令

    3.基本的select语句 

    4.列的别名

    5.去除重复行

    6.空值参与运算

    7.着重号

    8.查询常数

    9.显示表结构

    10.过滤数据


    1. SQL的分类

    DDL:数据定义语言。CREATE \ ALTER \ DROP \ RENAME \ TRUNCATE
    DML:数据操作语言。INSERT \ DELETE \ UPDATE \ SELECT (DQL)
    DCL:数据控制语言。COMMIT \ ROLLBACK(TCL) \ SAVEPOINT \ GRANT \ REVOKE

    DDL(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
    主要的语句关键字包括 CREATE 、 DROP 、 ALTER 等。


    DML(Data Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记录,并检查数据完整性。
    主要的语句关键字包括 INSERT 、 DELETE 、 UPDATE 、 SELECT 等。SELECT是SQL语言的基础,最为重要。


    DCL(Data Control Language、数据控制语言),用于定义数据库、表、字段、用户的访问权限和安全级别。


    主要的语句关键字包括 GRANT 、 REVOKE 、 COMMIT 、 ROLLBACK 、 SAVEPOINT 等 

    因为查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类:DQL(数据查询语言)。还有单独将 COMMIT 、 ROLLBACK 取出来称为TCL (Transaction Control Language,事务控制语言)。 

    2.SQL语言的规则和规范

    规则和规范的区别:规则是需要一定去遵守的,规范可以不严格遵守。这就好比是编译器给我们报的errors和warnings一样,errors是一定要去改的,warnings仅仅是一个警告,可以先不改

    2.1 SQL的规则

    - SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进
    - 每条命令以 ; 或 \g 或 \G 结束
    - 关键字不能被缩写也不能分行
    - 关于标点符号
      - 必须保证所有的()、单引号、双引号是成对结束的
      - 必须使用英文状态下的半角输入方式
      - 字符串型和日期时间类型的数据可以使用单引号(' ')表示
      - 列的别名,尽量使用双引号(" "),而且不建议省略as 

    2.2 SQL大小写规范 (建议遵守) 

    MySQL 在 Windows 环境下是大小写不敏感的
    MySQL 在 Linux 环境下是大小写敏感的
    数据库名、表名、表的别名、变量名是严格区分大小写的
    关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是忽略大小写的。
    推荐采用统一的书写规范:
    数据库名、表名、表别名、字段名、字段别名等都小写
    SQL 关键字、函数名、绑定变量等都大写 

    2.3 注 释 

    可以使用如下格式的注释结构 

    单行注释:#注释文字(MySQL特有的方式)
    单行注释:-- 注释文字(--后面必须包含一个空格。)
    多行注释:/* 注释文字 */

    2.4 命名规则

    1.数据库、表名不得超过30个字符,变量名限制为29个
    2.必须只能包含 A–Z, a–z, 0–9, _共63个字符
    3.数据库名、表名、字段名等对象名中间不要包含空格
    4.同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
    5.必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使用`(着重号)引起来
    6.保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了 

     2.5 数据导入指令

    在命令行客户端登录mysql,使用source指令导入 (注意这里一定要用命令行去执行,不能通过像navicate之类的图形化界面客户端去执行)

    source d:\mysqldb.sql

    这里我们导入了一个名为烛渊的数据库

     以下是导入成功的界面显示

     

     

    3.基本的select语句 

    select * from ……(表名)

    我们使用select * from employees就能够访问employees表中的全部的员工数据

     当然我们也可以挑选出表中的具体几列进行查看,这个时候我们就需要用到我们的列索引。

    这里我们注意在我们所要查询的最后一个表后面不要加逗号!!!

    如果我们在下面的salary后面加了一个逗号就会报错

    select employee_id,last_name,salary from employees;

     

    4.列的别名

    重命名一个列,便于计算
    紧跟列名,也可以在列名和别名之间加入关键字AS,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。
    AS(alias)可以省略

    列的别名可以使用一对“”引起来,不要使用''。
    建议别名简短,见名知意

    1. SELECT last_name AS name, commission_pct comm
    2. FROM employees;

    从下面的返回的结果集中可以看到个结果集的列名就是我们刚刚给我们原来的列起的别名 

    5.去除重复行

    使用下面的代码去我们的数据库中查询的时候,我们会发现大量的重复的部门id,那么我们应该如何去除重复行呢?

     

    1. SELECT department_id
    2. FROM employees;

     

     只要我们在SELECT后面加上一个distinct就能够让我们的部门中重复的id只显示一次

    1. SELECT DISTINCT department_id
    2. FROM employees;

     

    当我们输入下面的代码时,我们是将部门的ID和工资结合形成的一整个整体去去重,虽然这个语句没有报错,但是没啥实际意义。

    1. SELECT DISTINCT department_id,salary
    2. FROM employees;

     

     

    6.空值参与运算

     某字段是null就代表着这个字段是空值,下面列表中的最后一列中就存在空值,代表的是当前有些数据没有采集或者没办法填写。 null不是0,也不是'null'。

    1.所有运算符或列值遇到null值,运算的结果都为null

    下面我们可以发现只要是commisiion_pct这一栏为null的年工资也为null

    1. #3. 空值参与运算:结果一定也为空。
    2. SELECT employee_id,salary "月工资",salary * (1 + commission_pct) * 12 "年工资",commission_pct
    3. FROM employees;

     如何解决?

    有了ifnull之后,如果是null的地方就全不会被我们输入的替换参数给替换掉。 

    1. #实际问题的解决方案:引入IFNULL
    2. SELECT employee_id,salary "月工资",salary * (1 + IFNULL(commission_pct,0)) * 12 "年工资",commission_pct
    3. FROM `employees`;

    7.着重号

    就是我们键盘上1左边的那个`。

    我们需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突。如果真的相同,请在SQL语句中使用一对``(着重号)引起来。

    SELECT * FROM `order`;

     

    8.查询常数

    查询常数会给我们每一行都匹配上我们的查询常数

    1. #10. 查询常数
    2. SELECT '高级特务',123,employee_id,last_name
    3. FROM employees;

     

    9.显示表结构

    显示的是这张表创建时的详细信息。

    Field:表示字段名称。
    Type:表示字段类型,这里 barcode、goodsname 是文本型的,price 是整数类型的。
    Null:表示该列是否可以存储NULL值。
    Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一
    部分;MUL表示在列中某个给定值允许出现多次。
    Default:表示该列是否有默认值,如果有,那么值是多少。
    Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等。

    1. #11.显示表结构
    2. DESCRIBE employees; #显示了表中字段的详细信息
    3. #使用DESC也是可以的
    4. DESC employees;
    5. DESC departments;

    10.过滤数据

    使用WHERE 子句,将不满足条件的行过滤掉
    WHERE子句紧随 FROM子句

    最好要使用‘ ’来包裹要查询的字符串

     

    注意:在使用where查询的时候,自己最好要遵循大小写。因为在MySQL下对于大小写是不区分的,但是在oracle等其他数据库可能会要求报错。

    如果在oracle中查询的字符串使用双引号是会报错的。

    1. #12.过滤数据
    2. #练习:查询90号部门的员工信息
    3. SELECT *
    4. FROM employees
    5. #过滤条件,声明在FROM结构的后面
    6. WHERE department_id = 90;

    1. #练习:查询last_name为'King'的员工信息
    2. SELECT *
    3. FROM EMPLOYEES
    4. WHERE LAST_NAME = 'King';

     

     

  • 相关阅读:
    Docker打包Python项目
    「torch.cosine_smilarity() = 0」引发的关于cpu与gpu精度问题的探讨
    Qt实现抽奖程序
    金仓数据库KingbaseES客户端编程开发框架-Django(2. 概述)
    PTA 7-42 《图书目录管理系统》(初级修订版)
    如何解决基因行业海量数据传输难题?镭速传输给出答案
    探索性数据分析EDA的数据可视化
    Android Studio IDE安装指南
    中国汉服行业发展深度调研与未来趋势预测报告
    书本整理
  • 原文地址:https://blog.csdn.net/weixin_62684026/article/details/126051177