MySQL——初学MySQL

初学MySQL

1、什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么?

  • 数据库:
    英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。
    顾名思义:存储数据的仓库,实际上就是一堆文件。这些文件中存储了具有特定格式的数据。

  • 数据库管理系统:
    DataBaseManagement,简称DBMS。
    数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。

  • 常见的数据库管理系统:
    MySQL、Oracle、MS SqlServer、DB2、sybase等…

  • SQL:结构化查询语言
    程序员需要学习SQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL语句,最终来完成数据库中数据的增删改查操作。

  • SQL是一套标准,程序员主要学习的就是SQL语句,这个SQL在mysql中可以使用,同时在Oracle中也可以使用,在DB2中也可以使用。

  • 三者之间的关系?
    DBMS–执行–> SQL --操作–> DB

2、安装MySQL数据库网上一堆教程,自己照着安装就好了。

需要注意的事项
端口号:

  • 端口号port是任何一个软件/应用都会有的,端口号是应用的唯一代表。端口号通常和IP地址在一块,IP地址用来定位计算机的,端口号port是用来定位计算机上某个服务的/某个应用的!

  • 在同一台计算机上,端口号不能重复。具有唯一性。

  • mysql数据库启动的时候,这个服务占有的默认端口号是3306。这是大家都知道的事。记住。

  • 字符编码方式?
    设置mysql数据库的字符编码方式为 UTF8

  • mysql超级管理员用户名不能改,一定是:root
    你需要设置mysql数据库超级管理员的密码。
    设置密码的同时,可以激活root账户远程访问。
    激活:表示root账号可以在外地登录。
    不激活:表示root账号只能在本机上使用。

3、在windows操作系统当中,先用windows +R ,然后输入cmd,进入控制台。
怎么使用命令来启动和关闭mysql服务呢?
语法:

  • net stop 服务名称;
  • net start 服务名称;
    其它服务的启停都可以采用以上的命令。

4、mysql安装了,服务启动了,怎么使用客户端登录mysql数据库呢?
使用bin目录下的mysql.exe命令来连接mysql数据库服务器

本地登录(显示编写密码的形式):
	C:\Users\Administrator>mysql -uroot -p123456
	Welcome to the MySQL monitor.  Commands end with ; or \g.
	Your MySQL connection id is 1
	Server version: 5.5.36 MySQL Community Server (GPL)

	Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

	Oracle is a registered trademark of Oracle Corporation and/or its
	affiliates. Other names may be trademarks of their respective
	owners.

	Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

	mysql>

本地登录(隐藏密码的形式):
	C:\Users\Administrator>mysql -uroot -p
	Enter password: ******
	Welcome to the MySQL monitor.  Commands end with ; or \g.
	Your MySQL connection id is 2
	Server version: 5.5.36 MySQL Community Server (GPL)

	Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

	Oracle is a registered trademark of Oracle Corporation and/or its
	affiliates. Other names may be trademarks of their respective
	owners.

	Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

	mysql>

5、mysql常用命令:

退出mysql :exit

查看mysql中有哪些数据库?
    show databases;
	注意:以分号结尾,分号是英文的分号。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
mysql默认自带了4个数据库。

怎么选择使用某个数据库呢?
	mysql> use test;
	Database changed
	表示正在使用一个名字叫做test的数据库。

怎么创建数据库呢?
	mysql> create database xq;
	Query OK, 1 row affected (0.00 sec)

	mysql> show databases;
	+--------------------+
	| Database           |
	+--------------------+
	| information_schema |
	| xq                 |
	| mysql              |
	| performance_schema |
	| test               |
	+--------------------+

查看某个数据库下有哪些表?
	mysql> show tables;

注意:以上的命令不区分大小写,都行。

查看mysql数据库的版本号:
mysql> select version();
	+-----------+
	| version() |
	+-----------+
	| 5.5.36    |
	+-----------+

查看当前使用的是哪个数据库?
mysql> select database();
+-------------+
| database()  |
+-------------+
| bjpowernode |
+-------------+

mysql> show
-> databases
-> ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| xq                 |
| mysql              |
| performance_schema |
| test               |
+--------------------+

注意:mysql是不见“;”不执行,“;”表示结束!

mysql> show
->
->
->
->
->
->
->
->
-> \c
mysql>
\c用来终止一条命令的输入。

6、数据库当中最基本的单元是表:table

什么是表table?为什么用表来存储数据呢?

	姓名	性别	年龄(列:字段) 
	---------------------------
	张三	男			20            ------->行(记录)
	李四	女			21            ------->行(记录)
	王五	男			22            ------->行(记录)

数据库当中是以表格的形式表示数据的。
因为表比较直观。

任何一张表都有行和列:
	行(row):被称为数据/记录。
	列(column):被称为字段。

姓名字段、性别字段、年龄字段。

了解一下:
	每一个字段都有:字段名、数据类型、约束等属性。
	字段名可以理解,是一个普通的名字,见名知意就行。
	数据类型:字符串,数字,日期等,后期讲。

	约束:约束也有很多,其中一个叫做唯一性约束,
		这种约束添加之后,该字段中的数据不能重复。

7、关于SQL语句的分类?

SQL语句有很多,最好进行分门别类,这样更容易记忆。
	分为:
		DQL:
			数据查询语言(凡是带有select关键字的都是查询语句)
			select...

		DML:
			数据操作语言(凡是对表当中的数据进行增删改的都是DML)
			insert delete update
			insert 增
			delete 删
			update 改

			这个主要是操作表中的数据data。

		DDL:
			数据定义语言
			凡是带有create、drop、alter的都是DDL。
			DDL主要操作的是表的结构。不是表中的数据。
			create:新建,等同于增
			drop:删除
			alter:修改
			这个增删改和DML不同,这个主要是对表结构进行操作。

		TCL:
		
			是事务控制语言
			包括:
				事务提交:commit;
				事务回滚:rollback;

		DCL:
			是数据控制语言。
			例如:授权grant、撤销权限revoke....

8、导入一下提前准备好的数据:
xq.sql 这个文件中是我提前练习准备的数据库表。
怎么将sql文件中的数据导入呢?
mysql> source D:\course\03-MySQL\document\bjpowernode.sql

  • 注意:路径中不要有中文!!!!

9、关于导入的这几张表?

	mysql> show tables;
	+-----------------------+
	| Tables_in_xq      |
	+-----------------------+
	| dept                  |
	| emp                   |
	| salgrade              |
	+-----------------------+

	dept是部门表
	emp是员工表
	salgrade 是工资等级表

	怎么查看表中的数据呢?
		select * from 表名; //统一执行这个SQL语句。

	mysql> select * from emp; // 从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 |
	+-------+--------+-----------+------+------------+---------+---------+--------+

	mysql> select * from dept;
	+--------+------------+----------+
	| DEPTNO | DNAME      | LOC      |
	+--------+------------+----------+
	|     10 | ACCOUNTING | NEW YORK |
	|     20 | RESEARCH   | DALLAS   |
	|     30 | SALES      | CHICAGO  |
	|     40 | OPERATIONS | BOSTON   |
	+--------+------------+----------+

	mysql> select * from salgrade;
	+-------+-------+-------+
	| GRADE | LOSAL | HISAL |
	+-------+-------+-------+
	|     1 |   700 |  1200 |
	|     2 |  1201 |  1400 |
	|     3 |  1401 |  2000 |
	|     4 |  2001 |  3000 |
	|     5 |  3001 |  9999 |
	+-------+-------+-------+

10、
不看表中的数据,只看表的结构,有一个命令:
desc 表名;

	
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    |       |地理位置
+--------+-------------+------+-----+---------+-------+
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    |       |部门编号
+----------+-------------+------+-----+---------+-------+
mysql> desc salgrade;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| GRADE | int(11) | YES  |     | NULL    |       |工资等级
| LOSAL | int(11) | YES  |     | NULL    |       |最低工资
| HISAL | int(11) | YES  |     | NULL    |       |最高工资
+-------+---------+------+-----+---------+-------+

describe缩写为:desc
mysql> describe dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| DEPTNO | int(2)      | NO   | PRI | NULL    |       |
| DNAME  | varchar(14) | YES  |     | NULL    |       |
| LOC    | varchar(13) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

11、简单查询
11.1、查询一个字段?
select 字段名 from 表名;
其中要注意:

  • select和from都是关键字。

  • 字段名和表名都是标识符。

      强调:
      	对于SQL语句来说,是通用的,
      	所有的SQL语句以“;”结尾。
      	另外SQL语句不区分大小写,都行。
      
      查询部门名字?
      	mysql> select dname from dept;
      	+------------+
      	| dname      |
      	+------------+
      	| ACCOUNTING |
      	| RESEARCH   |
      	| SALES      |
      	| OPERATIONS |
      	+------------+
      	4 rows in set (0.00 sec)
    
      	mysql> SELECT DNAME FROM DEPT;
      	+------------+
      	| DNAME      |
      	+------------+
      	| ACCOUNTING |
      	| RESEARCH   |
      	| SALES      |
      	| OPERATIONS |
      	+------------+
      	4 rows in set (0.00 sec)
    
	11.2、查询两个字段,或者多个字段怎么办?
		使用逗号隔开“,”
		查询部门编号和部门名?
			select deptno,dname from dept;
			+--------+------------+
			| deptno | dname      |
			+--------+------------+
			|     10 | ACCOUNTING |
			|     20 | RESEARCH   |
			|     30 | SALES      |
			|     40 | OPERATIONS |
			+--------+------------+
	
	11.3、查询所有字段怎么办?

		第一种方式:可以把每个字段都写上
			select a,b,c,d,e,f... from tablename;

		第二种方式:可以使用*
			select * from dept;
			+--------+------------+----------+
			| DEPTNO | DNAME      | LOC      |
			+--------+------------+----------+
			|     10 | ACCOUNTING | NEW YORK |
			|     20 | RESEARCH   | DALLAS   |
			|     30 | SALES      | CHICAGO  |
			|     40 | OPERATIONS | BOSTON   |
			+--------+------------+----------+

			这种方式的缺点:
				1、效率低
				2、可读性差。
			在实际开发中不建议,可以自己玩没问题。
			你可以在DOS命令窗口中想快速的看一看全表数据可以采用这种方式。
	
	11.4、给查询的列起别名?
		mysql> select deptno,dname as deptname from dept;
		+--------+------------+
		| deptno | deptname   |
		+--------+------------+
		|     10 | ACCOUNTING |
		|     20 | RESEARCH   |
		|     30 | SALES      |
		|     40 | OPERATIONS |
		+--------+------------+
		使用as关键字起别名。
		注意:只是将显示的查询结果列名显示为deptname,原表列名还是叫:dname
		记住:select语句是永远都不会进行修改操作的。(因为只负责查询)

		as关键字可以省略吗?可以的
			mysql> select deptno,dname deptname from dept;
		
		假设起别名的时候,别名里面有空格,怎么办?
			mysql> select deptno,dname dept name from dept;
			DBMS看到这样的语句,进行SQL语句的编译,不符合语法,编译报错。
			怎么解决?
				select deptno,dname 'dept name' from dept; //加单引号
				select deptno,dname "dept name" from dept; //加双引号
				+--------+------------+
				| deptno | dept name  |
				+--------+------------+
				|     10 | ACCOUNTING |
				|     20 | RESEARCH   |
				|     30 | SALES      |
				|     40 | OPERATIONS |
				+--------+------------+
			
			注意:在所有的数据库当中,字符串统一使用单引号括起来,单引号是标准,双引号在oracle数据库中用不了。但是在mysql中可以使用。

			再次强调:数据库中的字符串都是采用单引号括起来。这是标准的。双引号不标准。

	11.5、计算员工年薪?sal * 12
		mysql> select ename,sal from emp;
		+--------+---------+
		| ename  | sal     |
		+--------+---------+
		| SMITH  |  800.00 |
		| ALLEN  | 1600.00 |
		| WARD   | 1250.00 |
		| JONES  | 2975.00 |
		| MARTIN | 1250.00 |
		| BLAKE  | 2850.00 |
		| CLARK  | 2450.00 |
		| SCOTT  | 3000.00 |
		| KING   | 5000.00 |
		| TURNER | 1500.00 |
		| ADAMS  | 1100.00 |
		| JAMES  |  950.00 |
		| FORD   | 3000.00 |
		| MILLER | 1300.00 |
		+--------+---------+
		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 |
		+--------+----------+

		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 |
		+--------+----------+

		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 |
		+--------+----------+

12、条件查询

12.1、什么是条件查询?
	不是将表中所有数据都查出来。是查询出来符合条件的。
	语法格式:
		select
			字段1,字段2,字段3....
		from 
			表名
		where
			条件;

14.2、都有哪些条件?

	= 等于
	查询薪资等于800的员工姓名和编号?
		select empno,ename from emp where sal = 800;
	查询SMITH的编号和薪资?
		select empno,sal from emp where ename = 'SMITH'; //字符串使用单引号

	<>或!= 不等于
	查询薪资不等于800的员工姓名和编号?
		select empno,ename from emp where sal != 800;
		select empno,ename from emp where sal <> 800; // 小于号和大于号组成的不等号

	< 小于
	查询薪资小于2000的员工姓名和编号?
		mysql> select empno,ename,sal from emp where sal < 2000;
		+-------+--------+---------+
		| empno | ename  | sal     |
		+-------+--------+---------+
		|  7369 | SMITH  |  800.00 |
		|  7499 | ALLEN  | 1600.00 |
		|  7521 | WARD   | 1250.00 |
		|  7654 | MARTIN | 1250.00 |
		|  7844 | TURNER | 1500.00 |
		|  7876 | ADAMS  | 1100.00 |
		|  7900 | JAMES  |  950.00 |
		|  7934 | MILLER | 1300.00 |
		+-------+--------+---------+


	<= 小于等于
	查询薪资小于等于3000的员工姓名和编号?
		select empno,ename,sal from emp where sal <= 3000;


	> 大于
	查询薪资大于3000的员工姓名和编号?
		select empno,ename,sal from emp where sal > 3000;

	>= 大于等于
	查询薪资大于等于3000的员工姓名和编号?
		select empno,ename,sal from emp where sal >= 3000;

	between … and …. 两个值之间, 等同于 >= and <=
	查询薪资在2450和3000之间的员工信息?包括2450和3000
		第一种方式:>= and <= (and是并且的意思。)
			select empno,ename,sal from emp where sal >= 2450 and sal <= 3000;
			+-------+-------+---------+
			| empno | ename | sal     |
			+-------+-------+---------+
			|  7566 | JONES | 2975.00 |
			|  7698 | BLAKE | 2850.00 |
			|  7782 | CLARK | 2450.00 |
			|  7788 | SCOTT | 3000.00 |
			|  7902 | FORD  | 3000.00 |
			+-------+-------+---------+
		第二种方式:between … and …
			select 
				empno,ename,sal 
			from 
				emp 
			where 
				sal between 2450 and 3000;
			
			注意:
				使用between and的时候,必须遵循左小右大。
				between and是闭区间,包括两端的值。

	is null 为 null(is not null 不为空)
	查询哪些员工的津贴/补助为null?
		mysql> select empno,ename,sal,comm from emp where comm = null;
		Empty set (0.00 sec)

		mysql> select empno,ename,sal,comm from emp where comm is null;
		+-------+--------+---------+------+
		| empno | ename  | sal     | comm |
		+-------+--------+---------+------+
		|  7369 | SMITH  |  800.00 | NULL |
		|  7566 | JONES  | 2975.00 | NULL |
		|  7698 | BLAKE  | 2850.00 | NULL |
		|  7782 | CLARK  | 2450.00 | NULL |
		|  7788 | SCOTT  | 3000.00 | NULL |
		|  7839 | KING   | 5000.00 | NULL |
		|  7876 | ADAMS  | 1100.00 | NULL |
		|  7900 | JAMES  |  950.00 | NULL |
		|  7902 | FORD   | 3000.00 | NULL |
		|  7934 | MILLER | 1300.00 | NULL |
		+-------+--------+---------+------+
		10 rows in set (0.00 sec)

		注意:在数据库当中null不能使用等号进行衡量。需要使用is null
		因为数据库中的null代表什么也没有,它不是一个值,所以不能使用
		等号衡量。

	查询哪些员工的津贴/补助不为null?
		select empno,ename,sal,comm from emp where comm is not null;
		+-------+--------+---------+---------+
		| empno | ename  | sal     | comm    |
		+-------+--------+---------+---------+
		|  7499 | ALLEN  | 1600.00 |  300.00 |
		|  7521 | WARD   | 1250.00 |  500.00 |
		|  7654 | MARTIN | 1250.00 | 1400.00 |
		|  7844 | TURNER | 1500.00 |    0.00 |
		+-------+--------+---------+---------+

	and 并且
	查询工作岗位是MANAGER并且工资大于2500的员工信息?
		select 
			empno,ename,job,sal 
		from 
			emp 
		where 
			job = 'MANAGER' and sal > 2500;
		
		+-------+-------+---------+---------+
		| empno | ename | job     | sal     |
		+-------+-------+---------+---------+
		|  7566 | JONES | MANAGER | 2975.00 |
		|  7698 | BLAKE | MANAGER | 2850.00 |
		+-------+-------+---------+---------+

	or 或者
	查询工作岗位是MANAGER和SALESMAN的员工?
		select empno,ename,job from emp where job = 'MANAGER';
		select empno,ename,job from emp where job = 'SALESMAN';

		select 
			empno,ename,job
		from
			emp
		where 
			job = 'MANAGER' or job = 'SALESMAN';
		
		+-------+--------+----------+
		| empno | ename  | job      |
		+-------+--------+----------+
		|  7499 | ALLEN  | SALESMAN |
		|  7521 | WARD   | SALESMAN |
		|  7566 | JONES  | MANAGER  |
		|  7654 | MARTIN | SALESMAN |
		|  7698 | BLAKE  | MANAGER  |
		|  7782 | CLARK  | MANAGER  |
		|  7844 | TURNER | SALESMAN |
		+-------+--------+----------+
	
	and和or同时出现的话,有优先级问题吗?
	查询工资大于2500,并且部门编号为10或20部门的员工?
		select 
			*
		from
			emp
		where
			sal > 2500 and deptno = 10 or deptno = 20;
		分析以上语句的问题?
			and优先级比or高。
			以上语句会先执行and,然后执行or。
			以上这个语句表示什么含义?
				找出工资大于2500并且部门编号为10的员工,或者20部门所有员工找出来。
		
		select 
			*
		from
			emp
		where
			sal > 2500 and (deptno = 10 or deptno = 20);
		
		and和or同时出现,and优先级较高。如果想让or先执行,需要加“小括号”
		以后在开发中,如果不确定优先级,就加小括号就行了。

	in 包含,相当于多个 or (not in 不在这个范围中)
		查询工作岗位是MANAGER和SALESMAN的员工?
			select empno,ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
			select empno,ename,job from emp where job in('MANAGER', 'SALESMAN');
			+-------+--------+----------+
			| empno | ename  | job      |
			+-------+--------+----------+
			|  7499 | ALLEN  | SALESMAN |
			|  7521 | WARD   | SALESMAN |
			|  7566 | JONES  | MANAGER  |
			|  7654 | MARTIN | SALESMAN |
			|  7698 | BLAKE  | MANAGER  |
			|  7782 | CLARK  | MANAGER  |
			|  7844 | TURNER | SALESMAN |
			+-------+--------+----------+
			注意:in不是一个区间。in后面跟的是具体的值。

		查询薪资是800和5000的员工信息?
			select ename,sal from emp where sal = 800 or sal = 5000;
			select ename,sal from emp where sal in(800, 5000); //这个不是表示800到5000都找出来。
			+-------+---------+
			| ename | sal     |
			+-------+---------+
			| SMITH |  800.00 |
			| KING  | 5000.00 |
			+-------+---------+
			select ename,sal from emp where sal in(800, 5000, 3000);

			// not in 表示不在这几个值当中的数据。
			select ename,sal from emp where sal not in(800, 5000, 3000);
			+--------+---------+
			| ename  | sal     |
			+--------+---------+
			| ALLEN  | 1600.00 |
			| WARD   | 1250.00 |
			| JONES  | 2975.00 |
			| MARTIN | 1250.00 |
			| BLAKE  | 2850.00 |
			| CLARK  | 2450.00 |
			| TURNER | 1500.00 |
			| ADAMS  | 1100.00 |
			| JAMES  |  950.00 |
			| MILLER | 1300.00 |
			+--------+---------+

	not 可以取非,主要用在 is 或 in 中
		is null
		is not null
		in
		not in

	like 
		称为模糊查询,支持%或下划线匹配
		%匹配任意多个字符
		下划线:任意一个字符。
		(%是一个特殊的符号,_ 也是一个特殊符号)

		找出名字中含有O的?
		mysql> select ename from emp where ename like '%O%';
		+-------+
		| ename |
		+-------+
		| JONES |
		| SCOTT |
		| FORD  |
		+-------+

		找出名字以T结尾的?
			select ename from emp where ename like '%T';
			
		找出名字以K开始的?
			select ename from emp where ename like 'K%';

		找出第二个字每是A的?
			select ename from emp where ename like '_A%';
		
		找出第三个字母是R的?
			select ename from emp where ename like '__R%';
		
		t_student学生表
		name字段
		----------------------
		zhangsan
		lisi
		wangwu
		zhaoliu
		jack_son

		找出名字中有“_”的?
			select name from t_student where name like '%_%'; //这样不行。

			mysql> select name from t_student where name like '%\_%'; // \转义字符。
			+----------+
			| name     |
			+----------+
			| jack_son |
			+----------+
上一篇:DQL语句之分组与过滤


下一篇:WEB02_Day05(下)-sql运算符、模糊查询、排序和分页、数值计算和聚合函数、分组查询、子查询