使用mysql
- 展示数据库,使用数据库;展示数据表。
mysql> SHOW DATABASES;
+----------------------------+
| Database |
+----------------------------+
| blog |
| bookshop |
| boot_cache |
| bootvue |
| device |
| ems |
| febs_security |
| haiyu |
| information_schema |
| ldms |
| learn |
| mmt_cloud |
| mydb |
| mysql |
| nacos_config |
| performance_schema |
| practice_teaching_base_ems |
| security |
| spring_cloud |
| ssm |
| sys |
+----------------------------+
21 rows in set (0.00 sec)
mysql> USE learn;
Database changed
mysql> SHOW TABLES;
+-----------------+
| Tables_in_learn |
+-----------------+
| city |
| dept |
| emp |
| emp_bak |
| myview1 |
| pro |
| salgrade |
| t_act |
| t_user |
| user |
| user_tbl |
+-----------------+
11 rows in set (0.00 sec)
- 显示表列
1、SHOW COLUMNS FROM emp;
2、DESCRIBE emp;
mysql> DESCRIBE emp;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| EMPNO | int | NO | PRI | NULL | |
| ENAME | varchar(10) | YES | | NULL | |
| JOB | varchar(9) | YES | | NULL | |
| MGR | int | YES | | NULL | |
| HIREDATE | date | YES | | NULL | |
| SAL | double(7,2) | YES | | NULL | |
| COMM | double(7,2) | YES | | NULL | |
| DEPTNO | int | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
检索数据
- 检索单列
- 检索多列(,)
- 检索所有列(*)
- 检索不同的行
mysql> SELECT deptno FROM emp;
+--------+
| deptno |
+--------+
| 20 |
| 30 |
| 30 |
| 20 |
| 30 |
| 30 |
| 10 |
| 20 |
| 10 |
| 30 |
| 20 |
| 30 |
| 20 |
| 10 |
+--------+
14 rows in set (0.00 sec)
# 解决办法是使用DISTINCT关键字,顾名思义,此关键字指示MySQL只返回不同的值。
mysql> SELECT DISTINCT deptno FROM emp;
+--------+
| deptno |
+--------+
| 20 |
| 30 |
| 10 |
+--------+
3 rows in set (0.00 sec)
- 限制结果
mysql> SELECT ename FROM emp LIMIT 5;
+--------+
| ename |
+--------+
| SMITH |
| ALLEN |
| WARD |
| JONES |
| MARTIN |
+--------+
5 rows in set (0.01 sec)
# LIMIT 5指示MySQL返回不多于5行。
mysql> SELECT ename FROM emp LIMIT 3, 4;
mysql> SELECT ename FROM emp LIMIT 4 OFFSET 3;
+--------+
| ename |
+--------+
| JONES |
| MARTIN |
| BLAKE |
| CLARK |
+--------+
4 rows in set (0.00 sec)
# LIMIT 3, 4(LIMIT 4 OFFSET 3)指示MySQL返回从行3开始的4行。
排序检索数据
- 排序数据(ORDER BY)
- 按多个排序(排序按顺序进行)
- 指定排序方向(DESC降序,默认ASC升序)
过滤数据
-
使用WHERE子句
-
WHERE子句操作符(<>、!=不等于,BETWEEN在指定的两个值之间)
mysql> SELECT * FROM emp WHERE sal BETWEEN 1000 AND 2000;
+-------+--------+----------+------+------------+---------+---------+--------+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+-------+--------+----------+------+------------+---------+---------+--------+
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 |
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 |
+-------+--------+----------+------+------------+---------+---------+--------+
6 rows in set (0.00 sec)
- 空值检查(IS NULL)
mysql> SELECT * FROM emp WHERE mgr IS NULL;
+-------+-------+-----------+------+------------+---------+------+--------+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+-------+-------+-----------+------+------------+---------+------+--------+
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 |
+-------+-------+-----------+------+------------+---------+------+--------+
1 row in set (0.00 sec)
-
OR操作符
-
计算次序(OR操作符优先级高于AND操作符)
在WHERE子句中使用圆括号 任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认计算次序,即使它确实是你想要的东西也是如此。使用圆括号没有什么坏处,它能消除歧义。
-
IN操作符(指定条件范围)
-
NOT操作符(有且只有一个功能,否定它之后所跟的任何条件)
用通配符进行过滤
-
LIKE操作符
- 通配符(wildcard)
- %(表示任何字符出现任意次数,%不能匹配NULL。)
- _(总是匹配单个字符)
- 搜索模式(search pattern)
- 通配符(wildcard)
-
使用通配符的技巧
正如所见, MySQL的通配符很有用。但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长。这里给出一些使用通配符要记住的技巧。
- 不要过度使用通配符。如果其他操作符能达到相同的目的,应该
使用其他操作符。- 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用
在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起
来是最慢的。- 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。