MySQL笔记Chapter1:数据库的创建,简单查找和排序

1.数据库概述

ObjectOutputStream --> Java对象 -->序列化到文件当中

反序列化

new Java对象

readObject()

writeObject()

使用IO流操作,过程太过复杂

使用数据库(数据管理系统:简单的sql语句),但是数据库中简单的处理还是依靠的IO流

  • 常见的有哪些数据库管理系统?

    IBM --> eclipse

    • Oracle 甲骨文

    ​ Oracle --> MySQL AB公司

    • DB2
    • Sybase “MS sqlServer支持标准sql的数据库管理”

1.1.MySQL的安装

百度网盘链接:https://pan.baidu.com/s/1mXbScF11q3eZogecJorHIQ
提取码:ekcs

安装过程中一般的过程都是next默认即可,要提一下的是有关端口号的知识:

image-20210325170306127

MySQL的默认端口号是3306

设置密码:(不要设置成123,容易被病毒攻破造成数据泄露)

image-20210325183343341

1.2数据库的登录

  • cmd命令行打开
  • 输入mysql -uroot -pyq66s回车,即可登录

其中-u代表用户名,-p代表密码

如果不希望密码显示表示,可以输入-p后回车,再输入密码,此时密码不会显示表示。

image-20210325184453311

数据库配置成功!

1.3MySQL的卸载(如何删除干净)

  • step1:找到软件

  • image-20210325185519324

  • 右键卸载即可删除。但是此时软件还没有删除干净,下次再安装会带来很多麻烦。

  • step2:C盘下的programfile里面的MySQL目录删除

    image-20210325185703680

  • step3:C盘下的ProgramData里面的MySQL目录删除。

    一般ProgramData目录是隐藏的,需要显示可见才可操作。

1.4 DB DBMS SQL的关系

1、sql、DB、DBMS分别是什么?他们之间的关系?
  • DB:DataBase,数据库。数据库在硬盘上实际以文件的形式存在。

  • DBMS:DataBase Management System:数据库管理系统,常见的有:MySQL,Oracle,DB2,Sybase…

  • SQL:结构化查询语言,是一门通用的语言。标准的sql适用于所有的数据库产品。SQL属于高级语言。

    SQL语句在执行的时候,实际内部也会先进行编译,然后再执行sql。SQL语句的编译由DBMS完成。

DBMS负责执行sql语句,通过执行sql语句来操作DB中的数据。

DBMS-(执行)->SQL-操作->DB

2、表(table)

表(table),是数据库的基本组织单元,所有的数据都以表格的形式组织,目的是可读性很强

一个表包括行和列:

  • 行:被称为数据/记录(data)
  • 列:被称为字段(column)

每个字段应该有哪些属性?

字段名、数据类型、相关的约束

学号(int)姓名(varchar)年龄(int)
1902051张三19
1903055李四20

相关约束,比如要求字段非空等。

3、学习MySQL主要还是学习通用的SQL语句,那么SQL语句包括增删查改,SQL语句怎么分类呢?
  • DQL(数据查询语言):查询语句,凡是select的语句都是DQL
  • DML(数据操作语言):insert delete update,对表中的数据进行增删改。
  • DDL(数据定义语言):create drop alter,对表结构的增删改。
  • TCL(事务控制语言):commit(提交事务),rollback回滚事务
  • DCL(数据控制语言):grant授权,revoke撤销权限等

root超管 --> 创建其他用户 :DCL

4、导入初始化数据(后期练习)

***注意每个语句结束都要打分号

第一步:登录MySQL数据库管理系统

​ dos窗口命令:

​ mysql -uroot -p****

第二步:查看有哪些数据库

​ show databases;(这个不是SQL语句,属于MySQL的命令)

image-20210325194749492

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bjpowernode        |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

第三步:创建属于自己的数据库

​ create database bjpowernode;(这个不是SQL语句,属于MySQL的命令)

image-20210325194957999

第四步:使用bjpowernode数据

	use  bjpowernode;(这个不是SQL语句,属于SQL命令)

​ 再次切换再使用use命令即可(如上图)

第五步:查看当前使用的数据库中有哪些表

​ show tables;

mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

第六步:初始化表格

​ source + 路径;(其实直接将初始的数据拖拉进去即可)

image-20210325195518230

初始化完成后有三张表,如上。

5、对sql脚本的理解

bjpowernode.sql,这个文件以sql结尾,这样的文件被称为“sql脚本”。什么是sql脚本呢?当一个文件的扩展名为sql,并且该文件中编写了大量的sql文件,我们称这样的文件为sql脚本。

注意:直接使用source命令可以执行sql脚本

sql脚本的数据量太大时,无法打开,请使用source命令完成初始化。

6、删除数据库

drop database bjpowernode;删除数据库

7、查看表结构
+---------------------------------+
| Tables_in_bjpowernode 		|
+--------------------------------+
| dept                 			   |		(部门表)
| emp                  			  |		(员工表)
| salgrade              		   |		(工资统计表)
+---------------------------------+
3 rows in set (0.00 sec)

命令:desc + 表名,查看表的结构:

image-20210331101535830
mysql> desc dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| DEPTNO | int(2)      | NO   | PRI | NULL    |       |            	#部门编号
| DNAME  | varchar(14) | YES  |     | NULL    |       |          	#部门名字
| LOC    | varchar(13) | YES  |     | NULL    |       |		      	#部门位置
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.03 sec)
mysql> desc emp;
+----------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key  | Default | Extra |
| ----- | ---- | ---- | ---- | ------- | ----- |
|       |      |      |      |         |       |
+----------+-------------+------+-----+---------+-------+
| EMPNO    | int(4)      | NO   | PRI | NULL    |       |			员工编号
| ENAME    | varchar(10) | YES  |     | NULL    |       |		 员工名字
| JOB      | varchar(9)  | YES  |     | NULL    |       |				工作岗位
| MGR      | int(4)      | YES  |     | NULL    |       |					上级领导编号
| HIREDATE | date        | YES  |     | NULL    |       |         		入职日期
| SAL      | double(7,2) | YES  |     | NULL    |       |					月薪

| COMM     | double(7,2) | YES  |     | NULL    |       |				补助/津贴
| DEPTNO   | int(2)      | YES  |     | NULL    |       |					部门编号
+----------+-------------+------+-----+---------+-------+
8 rows in set (0.05 sec)


mysql> desc salgrade;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| GRADE | int(11) | YES  |     | NULL    |       |					等级
| LOSAL | int(11) | YES  |     | NULL    |       |					最高薪资
| HISAL | int(11) | YES  |     | NULL    |       |						最低薪资
+-------+---------+------+-----+---------+-------+
3 rows in set (0.03 sec)
8、表格中的数据

使用语句:select * from +数据段的名字

mysql> select * from dept;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.01 sec)
mysql> select * from emp;
+-------+--------+-----------+------+------------+---------+---------+--------+
| EMPNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL     | COMM    | DEPTNO |
+-------+--------+-----------+------+------------+---------+---------+--------+
|  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 |    NULL |     20 |
|  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     30 |
|  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     30 |
|  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |    NULL |     20 |
|  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     30 |
|  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |    NULL |     30 |
|  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |    NULL |     10 |
|  7788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 | 3000.00 |    NULL |     20 |
|  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000.00 |    NULL |     10 |
|  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     30 |
|  7876 | ADAMS  | CLERK     | 7788 | 1987-05-23 | 1100.00 |    NULL |     20 |
|  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |    NULL |     30 |
|  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |    NULL |     20 |
|  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |    NULL |     10 |
+-------+--------+-----------+------+------------+---------+---------+--------+
14 rows in set (0.01 sec)
mysql> select * from salgrade;
+-------+-------+-------+
| GRADE | LOSAL | HISAL |
+-------+-------+-------+
|     1 |   700 |  1200 |
|     2 |  1201 |  1400 |
|     3 |  1401 |  2000 |
|     4 |  2001 |  3000 |
|     5 |  3001 |  9999 |
+-------+-------+-------+
5 rows in set (0.01 sec)
9、常用的命令
  • 创建数据库

    create database

  • 查看现在使用的数据库

    select database();

  • 查看现在的mySQL版本

    selcet version();

mysql> select database();
+-------------+
| database()  |
+-------------+
| bjpowernode |
+-------------+

1 row in set (0.00 sec)

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.36    |
+-----------+
1 row in set (0.01 sec)
  • 结束一条语句

    \c

  • 退出mysql

    exit();

  • 查看创建表的语句

    show create table + 数据库名查看数据库的内容

mysql> show create table emp;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                        |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| emp   | CREATE TABLE `emp` (
  `EMPNO` int(4) NOT NULL,
  `ENAME` varchar(10) DEFAULT NULL,
  `JOB` varchar(9) DEFAULT NULL,
  `MGR` int(4) DEFAULT NULL,
  `HIREDATE` date DEFAULT NULL,
  `SAL` double(7,2) DEFAULT NULL,
  `COMM` double(7,2) DEFAULT NULL,
  `DEPTNO` int(2) DEFAULT NULL,
  PRIMARY KEY (`EMPNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
10、简单的查询语句(DQL)

语法格式:

select 字段名1, 字段名2, 字段名3...from 表名;

提示:

  • 任何一个sql语句,以分号为结尾

  • sql语句不区分大小写

    mysql> select Empno,ENamE from
        -> emp;
    +-------+--------+
    | Empno | ENamE  |
    +-------+--------+
    |  7369 | SMITH  |
    |  7499 | ALLEN  |
    |  7521 | WARD   |
    |  7566 | JONES  |
    |  7654 | MARTIN |
    |  7698 | BLAKE  |
    |  7782 | CLARK  |
    |  7788 | SCOTT  |
    |  7839 | KING   |
    |  7844 | TURNER |
    |  7876 | ADAMS  |
    |  7900 | JAMES  |
    |  7902 | FORD   |
    |  7934 | MILLER |
    +-------+--------+
    14 rows in set (0.00 sec)
    

    查询员工的年薪?

    select ename, sal*12 from emp;

    mysql> select ename, sal*12 from emp;
    +--------+----------+
    | ename  | sal*12   |
    +--------+----------+
    | SMITH  |  9600.00 |
    | ALLEN  | 19200.00 |
    | WARD   | 15000.00 |
    | JONES  | 35700.00 |
    | MARTIN | 15000.00 |
    | BLAKE  | 34200.00 |
    | CLARK  | 29400.00 |
    | SCOTT  | 36000.00 |
    | KING   | 60000.00 |
    | TURNER | 18000.00 |
    | ADAMS  | 13200.00 |
    | JAMES  | 11400.00 |
    | FORD   | 36000.00 |
    | MILLER | 15600.00 |
    +--------+----------+
    14 rows in set (0.00 sec)
    

    字段可以参与运算,查询的字段结果可以重命名:

    select ename, sal * 12 as yearSal from emp;语句将展示出来的新字段重命名

    mysql> select ename,sal*12 as yearSal from emp;
    +--------+----------+
    | ename  | yearSal  |
    +--------+----------+
    | SMITH  |  9600.00 |
    | ALLEN  | 19200.00 |
    | WARD   | 15000.00 |
    | JONES  | 35700.00 |
    | MARTIN | 15000.00 |
    | BLAKE  | 34200.00 |
    | CLARK  | 29400.00 |
    | SCOTT  | 36000.00 |
    | KING   | 60000.00 |
    | TURNER | 18000.00 |
    | ADAMS  | 13200.00 |
    | JAMES  | 11400.00 |
    | FORD   | 36000.00 |
    | MILLER | 15600.00 |
    +--------+----------+
    14 rows in set (0.00 sec)
    

    别名之中有中文?

    select ename , sal * 12 as 年薪 from emp; #错误

    select ename, sal * 12 as'年薪'from emp;

    mysql> select ename, sal * 12 as'年薪'from emp;
    +--------+----------+
    | ename  | 年薪        |
    +--------+----------+
    | SMITH  |  9600.00 |
    | ALLEN  | 19200.00 |
    | WARD   | 15000.00 |
    | JONES  | 35700.00 |
    | MARTIN | 15000.00 |
    | BLAKE  | 34200.00 |
    | CLARK  | 29400.00 |
    | SCOTT  | 36000.00 |
    | KING   | 60000.00 |
    | TURNER | 18000.00 |
    | ADAMS  | 13200.00 |
    | JAMES  | 11400.00 |
    | FORD   | 36000.00 |
    | MILLER | 15600.00 |
    +--------+----------+
    14 rows in set (0.00 sec)
    

    标准字符串为单引号标识字符串。建议在数据库中书写字符串时使用单引号而不是双引号,便于不仅仅能在mysql中运行,也能在其他的数据库中运行。

    as关键字可以省略:

    mysql> select ename,sal * 12 yearSal from emp;
    +--------+----------+
    | ename  | yearSal  |
    +--------+----------+
    | SMITH  |  9600.00 |
    | ALLEN  | 19200.00 |
    | WARD   | 15000.00 |
    | JONES  | 35700.00 |
    | MARTIN | 15000.00 |
    | BLAKE  | 34200.00 |
    | CLARK  | 29400.00 |
    | SCOTT  | 36000.00 |
    | KING   | 60000.00 |
    | TURNER | 18000.00 |
    | ADAMS  | 13200.00 |
    | JAMES  | 11400.00 |
    | FORD   | 36000.00 |
    | MILLER | 15600.00 |
    +--------+----------+
    14 rows in set (0.00 sec)
    

    查询全部字段?

    select * from table名;

    *的效率较低,实际开发中不建议使用。

11、条件查询

语法格式:

select 字段1,字段2,字段3...from 表名 where 条件;

执行顺序:先from,然后where,最后select

  • 查询员工的工资为5000 的员工的姓名:
    select ename from emp where sal=5000;
mysql> select ename from emp where sal=5000;
+-------+
| ename |
+-------+
| KING  |
+-------+
1 row in set (0.00 sec)
  • 查询SMITH的工资:
mysql> select sal from emp where ename = 'SMITH';
+--------+
| sal    |
+--------+
| 800.00 |
+--------+
1 row in set (0.00 sec)

(字符串查询要写单引号)

  • 查询工资大于3000 的员工:
mysql> select ename, sal from emp where sal>=3000;
+-------+---------+
| ename | sal     |
+-------+---------+
| SCOTT | 3000.00 |
| KING  | 5000.00 |
| FORD  | 3000.00 |
+-------+---------+
3 rows in set (0.01 sec)
  • 查询工资不等于3000 的员工:
mysql> select ename,sal from emp where sal <> 3000;
+--------+---------+
| ename  | sal     |
+--------+---------+
| SMITH  |  800.00 |
| ALLEN  | 1600.00 |
| WARD   | 1250.00 |
| JONES  | 2975.00 |
| MARTIN | 1250.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| KING   | 5000.00 |
| TURNER | 1500.00 |
| ADAMS  | 1100.00 |
| JAMES  |  950.00 |
| MILLER | 1300.00 |
+--------+---------+
12 rows in set (0.00 sec)
  • 查询工资在某个区间内的:
mysql> select ename,sal from emp where sal >= 1100 and sal <= 3000;
+--------+---------+
| ename  | sal     |
+--------+---------+
| ALLEN  | 1600.00 |
| WARD   | 1250.00 |
| JONES  | 2975.00 |
| MARTIN | 1250.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| SCOTT  | 3000.00 |
| TURNER | 1500.00 |
| ADAMS  | 1100.00 |
| FORD   | 3000.00 |
| MILLER | 1300.00 |
+--------+---------+
11 rows in set (0.01 sec)
mysql> select ename,sal from emp where sal between 1100 and 3000;
+--------+---------+
| ename  | sal     |
+--------+---------+
| ALLEN  | 1600.00 |
| WARD   | 1250.00 |
| JONES  | 2975.00 |
| MARTIN | 1250.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| SCOTT  | 3000.00 |
| TURNER | 1500.00 |
| ADAMS  | 1100.00 |
| FORD   | 3000.00 |
| MILLER | 1300.00 |
+--------+---------+
11 rows in set (0.01 sec)

between and是闭区间[1000,3000],顺序不能交换,否则查询不到任何数据

between…and…还可以应用在字符串方面:

说明是以首字母为标记的。

mysql> select ename from emp where ename between 'A' and 'B';
+-------+
| ename |
+-------+
| ALLEN |
| ADAMS |
+-------+
2 rows in set (0.01 sec)
  • 找出哪些人没有津贴

在数据库中NULL不是一个值,代表什么也没有,为空。不能用等号衡量,必须使用is null或者is not null。

mysql> select ENAME, SAL from EMP where COMM is null;
+--------+---------+
| ENAME  | SAL     |
+--------+---------+
| SMITH  |  800.00 |
| JONES  | 2975.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| SCOTT  | 3000.00 |
| KING   | 5000.00 |
| ADAMS  | 1100.00 |
| JAMES  |  950.00 |
| FORD   | 3000.00 |
| MILLER | 1300.00 |
+--------+---------+
10 rows in set (0.00 sec)
  • 找出工作岗位是MANAGER和SALESMAN的员工:
mysql> select ENAME, JOB from EMP where JOB = 'SALSMAN' or JOB =  'MANAGER';
+-------+---------+
| ENAME | JOB     |
+-------+---------+
| JONES | MANAGER |
| BLAKE | MANAGER |
| CLARK | MANAGER |
+-------+---------+
3 rows in set (0.00 sec)

注意,字符要用单引号括起来。另外,or连接的前后都要写上的是条件。

  • and和or的联合使用:找出薪资大于3000且部门编号是20 或者 30 部门的员工

  • mysql> select ENAME,SAL,DEPTNO  from EMP where SAL > 1000 and DEPTNO = 20 or DEPTNO = 30;
    +--------+---------+--------+
    | ENAME  | SAL     | DEPTNO |
    +--------+---------+--------+
    | ALLEN  | 1600.00 |     30 |
    | WARD   | 1250.00 |     30 |
    | JONES  | 2975.00 |     20 |
    | MARTIN | 1250.00 |     30 |
    | BLAKE  | 2850.00 |     30 |
    | SCOTT  | 3000.00 |     20 |
    | TURNER | 1500.00 |     30 |
    | ADAMS  | 1100.00 |     20 |
    | JAMES  |  950.00 |     30 |
    | FORD   | 3000.00 |     20 |
    +--------+---------+--------+
    10 rows in set (0.00 sec)
    
    mysql> select ENAME,SAL,DEPTNO  from EMP where SAL > 1000 and (DEPTNO = 20 or DEPTNO = 30);
    +--------+---------+--------+
    | ENAME  | SAL     | DEPTNO |
    +--------+---------+--------+
    | ALLEN  | 1600.00 |     30 |
    | WARD   | 1250.00 |     30 |
    | JONES  | 2975.00 |     20 |
    | MARTIN | 1250.00 |     30 |
    | BLAKE  | 2850.00 |     30 |
    | SCOTT  | 3000.00 |     20 |
    | TURNER | 1500.00 |     30 |
    | ADAMS  | 1100.00 |     20 |
    | FORD   | 3000.00 |     20 |
    +--------+---------+--------+
    9 rows in set (0.00 sec)
    

    第一个写法是错误写法,第二个写法正确:当优先级不确定时注意写括号

  • in等同与or:找出工作岗位是MANAGER 和SALSMAN的员工:

  • mysql> select ENAME,SAL,JOB from EMP where JOB in ('SALSMAN','MANAGER');
    +-------+---------+---------+
    | ENAME | SAL     | JOB     |
    +-------+---------+---------+
    | JONES | 2975.00 | MANAGER |
    | BLAKE | 2850.00 | MANAGER |
    | CLARK | 2450.00 | MANAGER |
    +-------+---------+---------+
    3 rows in set (0.00 sec)
    

    注意,这不是区间,而是具体的值。比如下面的例子:

    mysql> select ENAME,SAL,JOB from EMP where SAL in (800,5000);
    +-------+---------+-----------+
    | ENAME | SAL     | JOB       |
    +-------+---------+-----------+
    | SMITH |  800.00 | CLERK     |
    | KING  | 5000.00 | PRESIDENT |
    +-------+---------+-----------+
    2 rows in set (0.00 sec)
    
    • 此外,in还有一个反面的:not in,表示不是列举的条件的,都查找出来:

      mysql> select ENAME,SAL,JOB from EMP where SAL not in (800,5000);
      +--------+---------+----------+
      | ENAME  | SAL     | JOB      |
      +--------+---------+----------+
      | ALLEN  | 1600.00 | SALESMAN |
      | WARD   | 1250.00 | SALESMAN |
      | JONES  | 2975.00 | MANAGER  |
      | MARTIN | 1250.00 | SALESMAN |
      | BLAKE  | 2850.00 | MANAGER  |
      | CLARK  | 2450.00 | MANAGER  |
      | SCOTT  | 3000.00 | ANALYST  |
      | TURNER | 1500.00 | SALESMAN |
      | ADAMS  | 1100.00 | CLERK    |
      | JAMES  |  950.00 | CLERK    |
      | FORD   | 3000.00 | ANALYST  |
      | MILLER | 1300.00 | CLERK    |
      +--------+---------+----------+
      12 rows in set (0.00 sec)
      
12、模糊查询like

找出名字中含有o的:

在模糊查询中,必须掌握两个特殊的符号:一个是%,一个是_

%表示任意多个字符,_代表任意一个字符。那么找出名字中带有o的应该使用下面的语句:

select ENAME from EMP where ename like '%O%';

mysql> select ENAME from EMP where ename like '%O%';
+-------+
| ENAME |
+-------+
| JONES |
| SCOTT |
| FORD  |
+-------+
3 rows in set (0.00 sec)

找出名字中第二个字母是A的:

mysql> select ENAME from EMP where ename like '_A%';
+--------+
| ENAME  |
+--------+
| WARD   |
| MARTIN |
| JAMES  |
+--------+
3 rows in set (0.00 sec)

找出名字中有下划线的:使用转义字符\

找出名字中给最后一个字母是t的:

mysql> select ENAME from EMP where ename like '%t';
+-------+
| ENAME |
+-------+
| SCOTT |
+-------+
1 row in set (0.00 sec)
13、排序(升序,降序)

按照工资升序,找出员工名和薪资:

关键字是order by;默认是按照升序。

mysql> select ENAME, SAL from EMP order by SAL;
+--------+---------+
| ENAME  | SAL     |
+--------+---------+
| SMITH  |  800.00 |
| JAMES  |  950.00 |
| ADAMS  | 1100.00 |
| WARD   | 1250.00 |
| MARTIN | 1250.00 |
| MILLER | 1300.00 |
| TURNER | 1500.00 |
| ALLEN  | 1600.00 |
| CLARK  | 2450.00 |
| BLAKE  | 2850.00 |
| JONES  | 2975.00 |
| SCOTT  | 3000.00 |
| FORD   | 3000.00 |
| KING   | 5000.00 |
+--------+---------+
14 rows in set (0.00 sec)
  • 怎么指定升序或者降序
    • asc:升序
    • desc:降序
mysql> select ENAME, SAL from EMP order by SAL desc;
+--------+---------+
| ENAME  | SAL     |
+--------+---------+
| KING   | 5000.00 |
| SCOTT  | 3000.00 |
| FORD   | 3000.00 |
| JONES  | 2975.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| ALLEN  | 1600.00 |
| TURNER | 1500.00 |
| MILLER | 1300.00 |
| WARD   | 1250.00 |
| MARTIN | 1250.00 |
| ADAMS  | 1100.00 |
| JAMES  |  950.00 |
| SMITH  |  800.00 |
+--------+---------+
14 rows in set (0.00 sec)

按照工资的降序排,当工资相同时,再按照名字的升序排列:

mysql> select ENAME, SAL from EMP order by SAL desc,ENAME asc;
+--------+---------+
| ENAME  | SAL     |
+--------+---------+
| KING   | 5000.00 |
| FORD   | 3000.00 |
| SCOTT  | 3000.00 |
| JONES  | 2975.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| ALLEN  | 1600.00 |
| TURNER | 1500.00 |
| MILLER | 1300.00 |
| MARTIN | 1250.00 |
| WARD   | 1250.00 |
| ADAMS  | 1100.00 |
| JAMES  |  950.00 |
| SMITH  |  800.00 |
+--------+---------+
14 rows in set (0.00 sec)

多字段排序:越靠前的字段越起主导作用。只有当前面的字段无法完成排序的时候,后面的字段才会起到排序作用。

按照列的顺序排:1代表第一列,2代表第二列。

mysql> select ENAME, SAL from EMP order by 2;
+--------+---------+
| ENAME  | SAL     |
+--------+---------+
| SMITH  |  800.00 |
| JAMES  |  950.00 |
| ADAMS  | 1100.00 |
| WARD   | 1250.00 |
| MARTIN | 1250.00 |
| MILLER | 1300.00 |
| TURNER | 1500.00 |
| ALLEN  | 1600.00 |
| CLARK  | 2450.00 |
| BLAKE  | 2850.00 |
| JONES  | 2975.00 |
| SCOTT  | 3000.00 |
| FORD   | 3000.00 |
| KING   | 5000.00 |
+--------+---------+
14 rows in set (0.00 sec)

mysql> select ENAME, SAL from EMP order by 1;
+--------+---------+
| ENAME  | SAL     |
+--------+---------+
| ADAMS  | 1100.00 |
| ALLEN  | 1600.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| FORD   | 3000.00 |
| JAMES  |  950.00 |
| JONES  | 2975.00 |
| KING   | 5000.00 |
| MARTIN | 1250.00 |
| MILLER | 1300.00 |
| SCOTT  | 3000.00 |
| SMITH  |  800.00 |
| TURNER | 1500.00 |
| WARD   | 1250.00 |
+--------+---------+
14 rows in set (0.00 sec)
mysql> select * from EMP order by 6;
+-------+--------+-----------+------+------------+---------+---------+--------+
| EMPNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL     | COMM    | DEPTNO |
+-------+--------+-----------+------+------------+---------+---------+--------+
|  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 |    NULL |     20 |
|  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |    NULL |     30 |
|  7876 | ADAMS  | CLERK     | 7788 | 1987-05-23 | 1100.00 |    NULL |     20 |
|  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     30 |
|  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     30 |
|  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |    NULL |     10 |
|  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     30 |
|  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     30 |
|  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |    NULL |     10 |
|  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |    NULL |     30 |
|  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |    NULL |     20 |
|  7788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 | 3000.00 |    NULL |     20 |
|  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |    NULL |     20 |
|  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000.00 |    NULL |     10 |
+-------+--------+-----------+------+------------+---------+---------+--------+
14 rows in set (0.00 sec)

但是不建议使用列的号码进行排序,若是列的顺序变换了,那么这样的写法就失效了。

找出工作岗位是SALSMAN的员工,并要求按照工资的降序排列:

mysql> select ENAME,SAL from EMP where JOB = 'SALESMAN' order by SAL desc;
+--------+---------+
| ENAME  | SAL     |
+--------+---------+
| ALLEN  | 1600.00 |
| TURNER | 1500.00 |
| WARD   | 1250.00 |
| MARTIN | 1250.00 |
+--------+---------+
4 rows in set (0.00 sec)

上述语句的执行顺序:

select

​ * 3

from

​ tablename 1

where

​ conditions 2

order by

​ … 4

注意:order by是最后执行的。验证请看下面的例子:

mysql> select ENAME,SAL as salary from EMP order by salary;
+--------+---------+
| ENAME  | salary  |
+--------+---------+
| SMITH  |  800.00 |
| JAMES  |  950.00 |
| ADAMS  | 1100.00 |
| WARD   | 1250.00 |
| MARTIN | 1250.00 |
| MILLER | 1300.00 |
| TURNER | 1500.00 |
| ALLEN  | 1600.00 |
| CLARK  | 2450.00 |
| BLAKE  | 2850.00 |
| JONES  | 2975.00 |
| SCOTT  | 3000.00 |
| FORD   | 3000.00 |
| KING   | 5000.00 |
+--------+---------+
14 rows in set (0.00 sec)

我们使用别名进行排序,别名可用作查询,说明order by是最后执行的。

用列的号码进行排序,若是列的顺序变换了,那么这样的写法就失效了。

找出工作岗位是SALSMAN的员工,并要求按照工资的降序排列:

mysql> select ENAME,SAL from EMP where JOB = 'SALESMAN' order by SAL desc;
+--------+---------+
| ENAME  | SAL     |
+--------+---------+
| ALLEN  | 1600.00 |
| TURNER | 1500.00 |
| WARD   | 1250.00 |
| MARTIN | 1250.00 |
+--------+---------+
4 rows in set (0.00 sec)

上述语句的执行顺序:

select

​ * 3

from

​ tablename 1

where

​ conditions 2

order by

​ … 4

注意:order by是最后执行的。验证请看下面的例子:

mysql> select ENAME,SAL as salary from EMP order by salary;
+--------+---------+
| ENAME  | salary  |
+--------+---------+
| SMITH  |  800.00 |
| JAMES  |  950.00 |
| ADAMS  | 1100.00 |
| WARD   | 1250.00 |
| MARTIN | 1250.00 |
| MILLER | 1300.00 |
| TURNER | 1500.00 |
| ALLEN  | 1600.00 |
| CLARK  | 2450.00 |
| BLAKE  | 2850.00 |
| JONES  | 2975.00 |
| SCOTT  | 3000.00 |
| FORD   | 3000.00 |
| KING   | 5000.00 |
+--------+---------+
14 rows in set (0.00 sec)

我们使用别名进行排序,别名可用作查询,说明order by是最后执行的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Blanche117

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

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

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

打赏作者

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

抵扣说明:

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

余额充值