文章目录
- 一、命令
- 1. 连接、断开服务器
- 二、sql语句
- 1. 创建并使用数据库
- 2. 查看数据库
- 3. 删除数据库
- 4. 创建表
- AUTO_INCREMENT 自增id
- 5. 删除表
- 6. 查看表
- 7. 查看表的结构
- 8. 增删改查
- 8.1 插入数据 insert
- 8.2 装载数据 LOAD DATA
- 8.3 查询数据 select
- (1) where子句
- a. 操作符
- b. like子句
- (2) UNION
- (3)排序 order by
- (4)分组 group by
- a. count() 函数
- b. with rollup
- c. max();列最大值
- d. min(); 列最小值
- e. sum(); 列总和
- f. avg();平均值
- (5)联表查询 左联 右联 内联
- (6)去重 DISTINCT
- 8.4 更新数据 update
- 8.5 删除数据 delete
- 系列博客
一、命令
1. 连接、断开服务器
需要用用户名和密码(也可设置无需密码登录)登录即连接到服务器
shell> mysql -h host -u user -p
Enter password: ********
连接成功后,可以在mysql>
提示下输入QUIT
(或\q
)随时退出:
mysql> QUIT
Bye
二、sql语句
1. 创建并使用数据库
创建数据库: CREATE DATABASE <数据库名>
CREATE DATABASE IF NOT EXISTS <数据库名>
使用mysqladmin创建 # mysqladmin -u root -p create oss_server
使用数据库:use <数据库名>
注意:创建并不代表使用,需要明确操作use来指定使用数据库。
2. 查看数据库
查看全部数据库 show databases
查看创建库的详细信息 show create database <数据库名>
3. 删除数据库
drop database <数据库名>
drop database if exists <数据库名>
4. 创建表
CREATE TABLE table_name (column_name column_type);
例子:
CREATE TABLE IF NOT EXISTS `user`(
`user_id` INT UNSIGNED AUTO_INCREMENT,
`name` VARCHAR(10) NOT NULL,
`tel` VARCHAR(20) NOT NULL,
`birthday` DATE,
PRIMARY KEY ( `user_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
AUTO_INCREMENT 自增id
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
5. 删除表
DROP TABLE table_name
6. 查看表
- 查看库中全部表
show tables
- 查看创建表的详细信息
show create table table_name
7. 查看表的结构
DESCRIBE table_name;
或desc table_name;
DESCRIBE tl_device_info;
8. 增删改查
8.1 插入数据 insert
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
实例:
"INSERT INTO runoob_tbl ".
"(runoob_title,runoob_author, submission_date) ".
"VALUES ".
"('$runoob_title','$runoob_author','$submission_date')";
8.2 装载数据 LOAD DATA
mysql> LOAD DATA LOCAL INFILE '文件目录' INTO TABLE pet;
8.3 查询数据 select
SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT N][ OFFSET M]
- from后可跟多个表,表和表之间用 ','相连
- where中可包含多个查询条件
- select后面可以跟着想查询的列名,列与列之间用‘,’相连,也可以用‘*’代替全部列
- limit设置返回数
- offset指定数据偏移量,也就是去掉几行元素
查询全部:select * from ...
(1) where子句
where语句中多个条件使用and
或or
来连接,
select * from ... where name = 'wang' and tel='134554654'
and优先级高于or,若需要先执行or部分,可以用小括号来提升其优先级
a. 操作符
b. like子句
sql为like子句提供了四种匹配方式:
-
%
:可以匹配任意长度、类型的字符,若是中文,用两个百分号表示(% %) -
_
:匹配任意类型的单个字符,相当于占位,限制表达式字符 -
[]
:括号中可以指定一个或多个字符、字符串或者范围,匹配括号内所列字符中的一个,类似正则。 -
[^]
:匹配括号内以外的字符。
示例:
-- 搜索name中最后一个字母是m的记录:
select * from user where name like '%m';
-- 搜索name中第二个字符是a的记录:
select * from user where name like '_a%';
(2) UNION
连接两个或以上的select语句,将其结果组合到一个结果集合中select ... from ... UNION [ALL/DISTINCT] select ... from ....
- ALL:可选,返回全部结果集,包含重复数据
- DISTINCT:可选,删除重复数据,返回剩余数据,默认值
select device_name from tl_device_info
UNION
select device_model from tl_device_type
查询结果:
(3)排序 order by
SELECT field1, field2,...fieldN FROM table_name1, table_name2... ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
默认为升序排序,降序需要添加关键字DESC
例子:
select * from tl_device_info
order by device_name DESC
(4)分组 group by
SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
a. count() 函数
例子,按设备id分组,并查询每个设备id出现了几次
select device_id,count(device_id) from tl_device_status_log
group by device_id
b. with rollup
跟group by搭配,在分组的基础上对结果进行统计
select device_id,count(device_id) from tl_device_status_log
group by device_id WITH ROLLUP
select coalesce(a,b,c): 该函数为,当a为null时显示b,若b为null显示c
select COALESCE(device_id,'总计'),count(device_id) from tl_device_status_log
group by device_id WITH ROLLUP
c. max();列最大值
查询一列中最大数值
select max(id) from tl_device_info
d. min(); 列最小值
select min(id) from tl_device_info
e. sum(); 列总和
SELECT SUM(capacity) from tl_cutting_tool_store_house
如果在没有返回匹配行 SELECT 语句中使用 SUM 函数,则 SUM 函数返回 NULL,而不是 0。
f. avg();平均值
SELECT avg(capacity) from tl_cutting_tool_store_house
(5)联表查询 左联 右联 内联
-
INNER JOIN(内连接,或等值连接)
:获取两个表中字段匹配关系的记录。 -
LEFT JOIN(左连接)
:获取左表所有记录,即使右表没有对应匹配的记录。 -
RIGHT JOIN(右连接)
: 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
写一个左连接的例子:
设备表的类型id字段对应 类型表的id,即外键
select di.device_name, dt.device_model
from tl_device_info di
left join tl_device_type dt on di.device_type_id = dt.id
(6)去重 DISTINCT
SELECT DISTINCT 列名 FROM 表;
8.4 更新数据 update
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
update tl_device_info set device_name = 'test1' where id =1
8.5 删除数据 delete
DELETE FROM table_name [WHERE Clause]