• MySQL(一)基本语句(列排名、去掉重复行、运算符与分页排序)详解


    一、基本的SELECT语句

    SQL的分类:

    DDL:(数据定义语言)(删结构)

    CREATE  DATABASE(创建数据库)

     ALTER  DATABASE(修改数据库)

    CREATE TABLE(创建新表)

    ALTER  TABLE(变更(改变)数据库表)

    DROP TABLE(删除表)

    CREATE INDEX(创建索引(搜索键))

    DROP  INDEX(删除索引

    RENAME(重命名)

    TRUNCATE(清空)

    DML:(数据操作语言)(删一条记录)

    INSERT  INTO(添加一条记录,向数据表中插入数据)

    INSERT INTO t_emp values()

    DELETE(删除,从数据库表中删除数据)

    UPDATA(修改,更新数据库表中的数据)

    SELECT(查询,从数据库表中获取数据)

    DCL:(数据控制语言)

    COMMIT(提交)\ROLLBACK(回滚,撤销)\SAVEPOINT(事务,回滚到具体的一个保存点上))|

    GRANT(赋予相关的权限)、REVOKE(回收相关的权限)

    SQL语言的规则与规范:

    使用一个表之前先使用数据库:

    USE  ssm:

    如果我们没有使用这句话,我们在查询过程中,换个数据库进行查询的时候会出现:

    SELECT *  FROM t_emp;

    查询如下的时候,我们在原来的数据库进行查询,换个数据库继续查询,没有之前字段的话,就会出现错误。

     我们换数据库之后如下所示: 

    我们发现出现了错误,所以当我们有多个数据库的时候,我们可以在前面加use语句,确保查询正确进行。

    每条命令以;结束,单条命令执行的时候,;可写可不写。多条命令执行的时候,就必须要写。

    我们出错如下所示:

     我们也可以以\G和\g结束

    我们在软件里面发现报错,我们可以利用命令提示符来进行演示。

     1.命名规则:

    列的别名可以用双引号表示,字符串型和日期时间类型用单引号 ' ' 。

    MySQL在Windows环境下是大小写不敏感的,MySQL在Linux环境下是大小写敏感的。

    数据库名、表名、表的别名、变量名是严格区分大小写的

    关键字、函数名、列名(或字段名)、列的别名(字段的别名)是忽略大小写的

    数据库名、表名、表的别名、字段名、字段别名等都小写

    SQL关键字、函数名、绑定变量等都大写。

    注释:#当行注释

    -- 注释文字(--后面有一个空格)

    /*  */多行注释

    命名规则:

    1.数据库、表名不得超过30个字符,变量名限制为29个

    2必须只能包含A-Z、a-z、0-9,_共63个字符

    3.数据库名、表名、字段名等对象名中间不要包含空格

    4.同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名。

    5.必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,在SQL语句中使用'(着重号)引起来

    6.保证字段名和类型的一致性,在命名字段并为其之指定数据类型的时候一定要保证一致性,假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了。

     可以在Mysql>source  地址。

    也可以通过软件创建新的数据库进行运行导入。(新建数据库,然后运行sql文件,进行刷新即可)

    2.基本的SELECT语句:SELECT  ......FROM    ...

    SELECT 1+1,3*2;
    SELECT 1+1,3*2 FROM DUAL;  #DUAL:伪表
    # *:表中的所有的字段(或列)
    SELECT * FROM t_user;
    SELECT id,username FROM t_use; 

     列的别名:

     #列的别名
    #可以通过空格来进行别名的创建
    #AS:全称:alias(别名),可以省略
    /*列的别名可以使用一对" "引起来,不要使用'',中文也可以命名,
    也可以去掉双引号,但是当别名有空格的时候不可以去掉引号
    */
    SELECT id  iidd,username AS us ,password "pw",age "年龄",gender "性 别"
    FROM t_user;

    我们如下所示:

    3.去除重复行  DISTINCT

    #去除重复行:
    #关键词 DISTINCT 用于返回唯一不同的值。
    SELECT  DISTINCT dept_id 
    FROM t_emp;
    /*
    错误的:
    SELECT  id(第一列30数据长),DISTINCT dept_id(第二列3条数据短) 
    FROM t_emp;
    */
    #对这两个字段都进行去重,仅仅是没有报错,但是没有实际意义
    SELECT DISTINCT dept_id ,id
    FROM t_emp;

    4.空值参与运算:

     

     

     5.着重号:

     

     6.查询常数

    当我们要用一个字段,而这个字段又不出现在这个表里,我们可以通过常量的形式进行添加。

     7.显示表结构

    使用DESCRIBE或DESC命令,表示表结构

     8.过滤数据:

     课后题目:

    1.查询员工1年后的年龄,并起名为age+12.

     2.查询表中去除重复部门以后的数据

    3. 查询员工id小于5的员工姓名和年龄

     4.查询员工号为6的员工姓名和部门号:

     5.显示表t_emp的结构,并查询其中的全部数据

     二、运算符

    1.算术运算符:

     

     

     

     取模运算:

     与被模数的正负有关。

    2.比较运算符

    比较的结果为真,则返回1。

    比较的结果为假,则返回0.

    其他情况则返回NULL

     

     

     只要NULL参与运算,就不会有任何的结果:

     <=>安全等于运算符:

    与等于运算符(=)的作用是相似的,唯一的区别是<=>可以用来对NULL进行判断,在两个操作数均为NULL时,其返回值为1,当一个操作数为NULL时,其返回值为0.而不是NULL。

     

     

    3. 非符号型的运算符:

    ISNULL 、IS NULL 、 IS NOT NULL:判断空还是不空

    LEAST:最小值运算符

    GREATEST:最大值运算符

    BETWEEN    AND:两者之间运算符

    IN:是否在列表里面

    NOT IN:不属于运算符

    LIKE:是否符合模糊匹配规则

    (1)ISNULL 、IS NULL 、 IS NOT NULL:判断空还是不空

     

     

    我们表中的字段用IS NULL ,IS NOT NULL,而比如数字比较的时候我们用<=>。 

    (2) LEAST:最小值运算符

    GREATEST:最大值运算符

     

    (3) BETWEEN  条件下界1    AND   条件上界2  (查询条件1和条件2范围内的数据,包含边界):两者之间运算符

     

    交换2和5之后,查询不到数据 

     

     查询员工id不在2到5的员工信息:

     

    (4)IN(set集合):是否在列表里面

    NOT IN)(set集合):不属于运算符

     查询员工为10,20,30id的员工信息

    我们也可以使用OR来进行查看:

    我们发现这样子查询不对,我们来进行补充条件:
     

    我们下来通过IN来进行判断:
     

    查询员工id不是10,20,30的员工信息:
     

    (5) LIKE:是否符合模糊匹配规则(模糊查询)

     

    查询员工名字里面包含字符'a'且包含字符'e'的员工信息: 

    方法一:

     

    方法二: 

    我们不确定是否是a在前面还是是b在前面,我们可以把两种情况全部加载进去:

     ​​​​​​​

     查询第二个字符是'a'的员工信息:

     

     查询第二个字符是_且第三个字符是'a'的员工信息:

     

    (6)REGEXP:判断一个值是否符合正则表达式的规则

    RLIKE: 判断一个值是否符合正则表达式的规则

    expr  REGEXP 匹配条件:如果expr满足匹配条件,返回1;如果不满足,则返回0.

    若expr或匹配条件任意一个为NULL,则结果为NULL.

    REGEXP运算符在进行匹配时,常用的有下面几种通配符:

    1.'$'匹配以该字符前面的字符结尾的字符串

    2.'.'匹配任何一个单字符

    3.‘向下的箭头'匹配以该字符后面的字符开头的字符串

    4.'*'匹配零个或多个在它前面的字符

    5.“[  ]"匹配在方括号内的任何字符

     

     

    3.逻辑运算符

    逻辑运算符主要用来判断表达式的真假,在MySQL中,逻辑运算符的返回结果为1,0或者NULL。

     (1)NOT或 !(逻辑非)(非假得真,非真得假)

     

    (2)AND 或 &&(逻辑与)(有假则假,全为真才为真)

     

    (3)OR 或 ||(逻辑或)(有真则真)


    (4)XOR(逻辑异或,一个为真则全为真,全为真或全为假则为假)

     满足其中一个条件但是不满足另一个条件

     OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先对AND两边的操作数进行操作,在与OR中的操作数进行结合。

     4.位运算符 

    位运算符是在二进制数上进行计算的运算符,位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数。

    >>  按位右移

    <<按位左移

    &按位与

    | 按位或

    ~按位取反

     

    我们的底层都是二进制进行存储的,一位为8个字节,12为8+4,2的三次方加2的2次方,即为00001100,而5为2的2次方加1,为00000101,我们进行按位与操作,即为全为真则真,为00000100,即为4.

    12=8+4,2的三次方加2的2次方,即为00001100,而5为2的2次方加1,为00000101,我们进行按位或操作,即为有真则真,为00001101,为2的2次方加2的3次方加1,等于13。

     按位取反:

    按位取反(~)运算符将给定的值的二进制数逐位进行取反操作,即将1变为0,将0变为1

     我们进行按位取反的底层操作:

    我们的底层都是二进制进行存储的,一位为8个字节,

    1的00000001,我们进行取反操作之后为11111110,

    10为8+2,为2的3次方和2的一次方,为00001010

    我们进行按位与操作,全为真才为真,00001010,为10.

      

    我们进行二进制运算,4为00000100,我们向左移一位,为00001000,为2的三次方为8。

    8为00001000,我们向右移一位,为00000100,为2的2次方,为4. 

    运算符课后练习:

    1.选择员工id不在6-10的员工的姓名和年龄:

     2.选择在20或50号部门工作的员工姓名和部门号

     

     3.选择公司中没有年龄的员工姓名及dept_id。

    4.选择公司中有年龄的员工姓名,员工id,和部门id. 

     ​​​​​​​

     5.选择员工姓名的第三个字母是a的员工姓名:

    6.选择姓名中有字母a和k的员工姓名:

     

     

     7.显示出表t_emp表中emp_name以'e'结尾的员工信息

     

     8.显示出表dept_id部门编号在2-3之间的姓名,员工id

     以下方式在查询出来的时候可能与以上结果会有不同之处。仅试用于本题。

     

     9.显示出表t_emp的emp_id是5,6,9的员工姓名、年龄、部门id

     

     三、排序与分页

    1.排序

    1.1排序规则

    (1)使用ORDER BY 对查询到的数据进行排序操作
    升序:ASC(ascend)
    降序:DESC(descend)

    (2)我们可以使用列的别名,进行排序

    列的别名只能在ORDER BY中使用,不能在WHERE中使用

    (3) 强调格式:WHERE需要声明在FROM后,ORDER BY之前。

     

     

     列的别名:

     

     

    二级排序:

     在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。

     2.分页

    2.12.2mysql使用limit实现数据的分页显示:

    每页显示pageSize条记录,此时显示第pageNo页:

    公式:LIMIT  (pageNo-1)*pageSize,pageSize;

     

     

     

     2.2WHERE.....ORDER BY.......LIMIT 的声明顺序如下:

     

     2.3MySQL8.0新特性:LIMIT....条目数..OFFSET...偏移量..

     LIMIT子句必须放在整个SELECT语句的最后。

    分页操作:

     我们使用DB2数据库,我们使用FETCH FIRST 5 ROWS ONLY这样子的关键字来实现分页操作。

    1. SELECT emp_id,emp_name,age,gender
    2. FROM t_emp
    3. ORDER BY age DESC
    4. FETCH FIRST 5 ROWS ONLY;

    我们使用SQL Server 和Access,需要使用TOP关键字,比如:

    1. SELECT TOP 5 name, emp_id,emp_name,age,gender
    2. FROM t_emp
    3. ORDER BY age DESC

    我们使用Oracle,我们基于ROWNUM,如下所示:

    1. SELECT ROWNUM, emp_id,emp_name,age,gender
    2. FROM t_emp
    3. WHERE ROWNUM<5
    4. ORDER BY age DESC;

    2.4LIMIT可以使用在MySQL、PGSQL、MariaDB、SQLite等数据库中使用,表示分页。

    不能使用在SQL Server 、DB2、Oracle!

    排序与分页课后练习:

    1.查询员工的姓名和员工id和年龄,按年龄进行降序,按姓名升序显示。

     

    2.选择年龄不在18-30的员工的姓名和id,按id降序,显示第2到8位置的数据

    3.查询员工名字里面包含e的员工信息,并且按员工id进行降序,在按部门号升序

     正则表达式:

     

  • 相关阅读:
    Uniapp学习之从零开始写一个简单的小程序demo(新建页面,通过导航切换页面,发送请求)
    数据传输安全面临的主要挑战
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    高通道筛选出的小分子 应用到伊蚊“控制”
    python自动化测试(二):获取元素定位的基本方式
    数据库存储过程和触发器
    Pytorch学习笔记(四)官方60min入门教程之图像分类器
    “三位一体”超级混沌工程主要特点及功能
    软件工程毕业设计课题(71)微信小程序毕业设计PHP校园浴室预约小程序系统设计与实现
    功能基础篇3——Python中的输入输出、文件读写、序列化
  • 原文地址:https://blog.csdn.net/weixin_59448049/article/details/127677098