mysql order可以跟多个_mysql order可以跟多个


本文使用 Zhihu On VSCode 创作并发布

登录

本地登录命令:mysql -u 用户名 -p


▶ mysql -u jinl -p


然后按回车输入密码。

指定端口登录


▶ mysql -u jinl -p -P 3306


指定IP地址以及端口登录


▶ mysql -h 127.0.0.1 -u jinl -p -P 3306


增删改查

  • 增加两个表,一个是user表,一个是grade表。
    新增表的语法为create table table_name(column_name ,column_contrains);例子:
create table grade(
  id int primary key,
  chinese int,
  math int
) default charset=utf8


  • 添加字段
-- 字段默认加在最后,在后面加上First加在首位, 要加中间位置加的话,加个 After [存在的字段]
alter table <表名> add column <字段> <数据类型> <约束> <字段位置>; 

alter table jinl add column test text not null First;


  • 添加数据:
insert into table_name(column_1, column_2......)
values
(value_1, value_2......)

insert into user(id, name, sex)
values
(2, daoli, girl)


有这么两个表:


user
+------+----------+------+
| id   | name     | sex  |
+------+----------+------+
|    2 | daoli    | girl |
|    3 | jinl1874 | boy  |
|    4 | jinl     | boy  |
|    1 | jinl     | girl |
+------+----------+------+

grade
+------+---------+------+
| id   | chinese | math |
+------+---------+------+
|    1 |      10 |   30 |
|    2 |      60 |  100 |
|    3 |      50 |   90 |
+------+---------+------+


  • 基本语句:
SELECT fields from table_name
while condition
limit n
offset m


condition 是查询的条件,
limit 是限制返回的查询条数,
offset 是 Select 语句开始查询的偏移量。

condition 里的各个操作符:

<, >, =, >=, <=,
in 表示属于,
<> 和 != 表示不等于。
一般用 not exists 代替,这样可以最大限度使用索引。

like 子句,如果没有%,那么和 = 的作用是一样的。
% 表示替代任意字符,与正则表达式里的 * 类似。

  • 排序:order by 字段 asc(升序)/dasc (降序)
    功能:就是以某个字段升序降序。
    例子:从用户表查找id并升序显示 select id, name from user oreder by id ase
mysql> select id, name from user order by id;
+------+----------+
| id   | name     |
+------+----------+
|    1 | jinl     |
|    4 | jinl     |
|    2 | daoli    |
|    3 | jinl1874 |
+------+----------+
4 rows in set (0.00 sec)


  • 分组: group by 字段
    功能:当查询结果里某个字段有重复的时候,就可以使用group by 某个字段来分组。
    例子:select name from user groub by name,其结果为
mysql> select id, name from user group by name;              
+------+----------+
| id   | name     |
+------+----------+
|    2 | daoli    |
|    3 | jinl1874 |
|    1 | jinl     |
+------+----------+
3 rows in set (0.00 sec)


还可以加个count,统计每个字段的数据。


mysql> select id, name, count(name) from user group by name;
+------+----------+-------------+
| id   | name     | count(name) |
+------+----------+-------------+
|    2 | daoli    |           1 |
|    3 | jinl1874 |           1 |
|    1 | jinl     |           2 |
+------+----------+-------------+
3 rows in set (0.00 sec)


  • 去重
select [DISTINCT] fields from table
[where conditions]
union  [ALL]
select fields from table


去除重复的数据,一般Union会去除重复的数据,所以不需要DISTINCT。


-- ALL 表示所有的字段都去重
mysql> select name from user 
union 
select name from user; 
+----------+
| name     |
+----------+
| daoli    |
| jinl1874 |
| jinl     |
+----------+
3 rows in set (0.01 sec)


使用DISTINCT去重


mysql> select distinct name from user;
+----------+
| name     |
+----------+
| daoli    |
| jinl1874 |
| jinl     |
+----------+
3 rows in set (0.01 sec)


  • 连接
    分为内连接和外连接。

外连接里有左右连接,左连接是指取左边的全部,右边的边按照条件来。


-- 不加括号可能会报错
select name, math from (user) left join grade on (user.id = grade.id);
+----------+------+
| name     | math |
+----------+------+
| jinl     |   30 |
| daoli    |  100 |
| jinl1874 |   90 |
| jinl     | NULL |
+----------+------+
4 rows in set (0.00 sec)


外右连接,与左连接刚好相反:


select name, math from (user) right join grade on (user.id = grade.id); 
+----------+------+
| name     | math |
+----------+------+
| daoli    |  100 |
| jinl1874 |   90 |
| jinl     |   30 |
+----------+------+
3 rows in set (0.00 sec)


内连接:inner join,等于join,返回两张表都满足条件的部分。


select name, math from (user) join grade on (user.id = grade.id);       
+----------+------+
| name     | math |
+----------+------+
| daoli    |  100 |
| jinl1874 |   90 |
| jinl     |   30 |
+----------+------+
3 rows in set (0.00 sec)


  • 更改表的字段名
alter table <表名> change <旧字段> <新字段> <新数据类型>

alter table jinl change test name text not null;


  • 更改字段数据类型
ALTER TABLE <表名> MODIFY <字段名> <数据类型>

alter table user 
modify id = 4 varchar(30);


  • 修改表的数据
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]


  • 删除表
drop table if exists <表名>
drop table if exists jinl;


  • 删除字段
alter table <表名> drop <字段>

alter table jinl drop name;


  • 删除表的数据
delete from <表名> [Where 子句] [Order by 子句] [Limit 子句]

delete from user where id = 4;


其它基本操作

查看所有数据库:


show databases;


切换数据库:


use <数据库名>

use test


查看所有表:


show tables;


查看表的信息:


desc <表名>