MySQL01-18:简单查询/条件查询/模糊查询

开始时间:2021-03-02

数据库作用

没有用数据库
通过序列化和反序列化实现文件和对象的读写
有了数据库就上数据库了

安装MySQL

直接看视频比较好

测试MySQL

装完之后测试MySQL
进入命令行
键入mysql
在这里插入图片描述

再加-uroot -p333
root是用户名 333是密码

改密码
在这里插入图片描述

SQL/DB/DBMS

DB:DataBase(数据库,在硬盘上以文件形式存在)
DBMS:DataBase Management System(数据库管理系统:MySQL Oracle…)
SQL:结构化查询语言。标准的SQL适用于所有的数据库产品

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

表(Table)

表是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强。
行:数据/记录(data)
列:字段(column)
每一个字段的属性:
字段名、数据类型、相关的约束

SQL语句分类

增删改查

  • DQL-Data Query Language(数据查询语言):查询语句,凡是select语句都是DQL。
  • DML-Data Manipulation Language(数据操作语言): insert delete update,对表当中的数据进行增删改。
  • DDL-Data Definition Language(数据定义语言): create drop alter,对表结构的增删改。
  • TCL-Tool Command Language(事务控制语言): commit提交事务,rollback回滚事务。
  • DCL-Dialog Control Language(数据控制语言) : grant授权、revoke撤销权限等。

导入初始化数据

第一步登录:

C:\Users\Administrator>mysql -uroot -p333

第二步查看有哪些数据库
记得加分号

mysql> show databases;

在这里插入图片描述
第三步:创建自己的数据库

mysql> create database MyDB;

第四步:使用MyDB的数据

mysql> use MyDB;

第五步:初始化数据

mysql> source F:\编程学习\MySQL_Course\bjpowernode\bjpowernode.sql;

这里是写 source 再把sql文件直接拖进来的
添加完后新表有了三个数据
在这里插入图片描述
source命令->批量执行sql语句

第六步:删库跑路

mysql> drop database jindaohei;

查看表的结构

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> select database();
+------------+
| database() |
+------------+
| mysql      |
+------------+

查看mysql版本号

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.58    |
+-----------+

结束一条语句

\c

退出mysql

exit

查看创建表的语句

mysql> show create table emp;

简单的查询语句

语法格式
select 字段名1,字段名2,字段名3…from 表名;

例如

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

先找到table中的emp
我们要查姓名和编号
那就查

mysql> select ENAME,EMPNO from emp;
+--------+-------+
| ENAME  | EMPNO |
+--------+-------+
| SMITH  |  7369 |
| ALLEN  |  7499 |
| WARD   |  7521 |
| JONES  |  7566 |
| MARTIN |  7654 |
| BLAKE  |  7698 |
| CLARK  |  7782 |
| SCOTT  |  7788 |
| KING   |  7839 |
| TURNER |  7844 |
| ADAMS  |  7876 |
| JAMES  |  7900 |
| FORD   |  7902 |
| MILLER |  7934 |
+--------+-------+

注意:sql语句不区分大小写
包括语句本身,包括字段名,都是大小写不敏感的

可以直接在查询中进行简单运算

mysql> select sal*12 from emp;
+----------+
| sal*12   |
+----------+
|  9600.00 |
| 19200.00 |
| 15000.00 |
| 35700.00 |
| 15000.00 |
| 34200.00 |
| 29400.00 |
| 36000.00 |
| 60000.00 |
| 18000.00 |
| 13200.00 |
| 11400.00 |
| 36000.00 |
| 15600.00 |
+----------+

也可以给新查询的数据用as(as可以省略)重命名,改成中文需要加单引号

mysql>  select ename as '姓名',sal*12 as yearsal from emp;
+--------+----------+
| 姓名       | 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 * 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 |
+-------+--------+-----------+------+------------+---------+---------+--------+

条件查询

查询工资大于2500的员工姓名

mysql> select ENAME,SAL from emp where sal>2500;
+-------+---------+
| ENAME | SAL     |
+-------+---------+
| JONES | 2975.00 |
| BLAKE | 2850.00 |
| SCOTT | 3000.00 |
| KING  | 5000.00 |
| FORD  | 3000.00 |
+-------+---------+

查询blake的工资

mysql> select ename,sal from emp where ename='blake';
+-------+---------+
| ename | sal     |
+-------+---------+
| BLAKE | 2850.00 |
+-------+---------+

查询不等于的值

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

between…and…

找出工资介于1100到3000之间的

mysql> select ename,sal from emp where sal between 1100 and 3000;//这里取的是闭区间
//mysql> select ename,sal from emp where sal >= 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 |
+--------+---------+

还可以写在字符之间

mysql> select ename,sal from emp where ename between 'a' and 'c';//比较首字母,这里是左闭右开
+-------+---------+
| ename | sal     |
+-------+---------+
| ALLEN | 1600.00 |
| BLAKE | 2850.00 |
| ADAMS | 1100.00 |
+-------+---------+

null

津贴为空的情况
不用等号,用 is 或者 is not
null和0是不一样的

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

and和or

找出工资大于3000 且 部门编号是20或者30的
错误示范:

mysql> select ename,job ,mgr,deptno,sal from emp where sal>3000 and deptno=20 or deptno=30;
+--------+----------+------+--------+---------+
| ename  | job      | mgr  | deptno | sal     |
+--------+----------+------+--------+---------+
| ALLEN  | SALESMAN | 7698 |     30 | 1600.00 |
| WARD   | SALESMAN | 7698 |     30 | 1250.00 |
| MARTIN | SALESMAN | 7698 |     30 | 1250.00 |
| BLAKE  | MANAGER  | 7839 |     30 | 2850.00 |
| TURNER | SALESMAN | 7698 |     30 | 1500.00 |
| JAMES  | CLERK    | 7698 |     30 |  950.00 |
+--------+----------+------+--------+---------+
6 rows in set (0.00 sec)

正确示范:

mysql> select ename,job ,mgr,deptno,sal from emp where sal>3000 and( deptno=20 or deptno=30);
Empty set (0.00 sec)

注意优先级

条件查询in

和or的用法类似

mysql> select ename,job ,mgr,deptno,sal from emp where sal>1000 and deptno in (20,30);
//这里的in不是范围的开闭区间,仅仅是满足 deptno=20 或者 deptno=30
+--------+----------+------+--------+---------+
| ename  | job      | mgr  | deptno | sal     |
+--------+----------+------+--------+---------+
| ALLEN  | SALESMAN | 7698 |     30 | 1600.00 |
| WARD   | SALESMAN | 7698 |     30 | 1250.00 |
| JONES  | MANAGER  | 7839 |     20 | 2975.00 |
| MARTIN | SALESMAN | 7698 |     30 | 1250.00 |
| BLAKE  | MANAGER  | 7839 |     30 | 2850.00 |
| SCOTT  | ANALYST  | 7566 |     20 | 3000.00 |
| TURNER | SALESMAN | 7698 |     30 | 1500.00 |
| ADAMS  | CLERK    | 7788 |     20 | 1100.00 |
| FORD   | ANALYST  | 7566 |     20 | 3000.00 |
+--------+----------+------+--------+---------+

模糊查询like

%代表任意多个字符
_代表任意一个字符

说到这个我就觉得这个有些像正则表达式了
跳转一下看看正则表达式
找出第二个字母是A的

mysql> select ename from emp where ename like '_A%';
+--------+
| ename  |
+--------+
| WARD   |
| MARTIN |
| JAMES  |
+--------+

mysql 的转义字符
反斜线\就行

临时表

每一个查询命令在执行时,实际上操作都是上一个查询命令生成的临时表

在当前查询命令执行完毕后,MySql服务器自动将上一个查询命令生成的临时表从内存中销毁。导致用户最终看到的临时表只能查询语句中,最后一个查询生成的临时表

七个查询命令与临时表之间关系:
1.七个查询命令中,只有FROM命令不需要操作临时表,FROM负责将硬盘上表文件加载到内存中生成第一个临时表,剩下的六个查询命令操作的都是上一个查询命令生成的临时表
2.七个查询命令中,只有GROUP BY命令在执行完毕后,才有机会在内存中生成多个临时表。其他五个查询命令在执行完毕后,只能在内存中生成一个临时表I
3.七个查询命令中,只有HAVING命令在执行完毕后,不会生成新临时表。负责将GROUP
BY生成的临时表中不满足条件的临时表从内存中进行删除处理

临时表是按语句执行的顺序,生成一个,再细化生成,再细化,最终到确定的结果
结束时间:2021-03-03

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值