mysql单表操作_mysql单表操作

 2023-09-11 阅读 20 评论 0

摘要:mysql记录操作mysql日志文件在哪?MySQL数据操作: DML在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括MySQL主从配置。使用INSERT实现数据的插入UPDATE实现数据的更新使用DELETE实现数据的删除使用SELECT查询数据以及。插入数据inse

mysql记录操作

mysql日志文件在哪?MySQL数据操作: DML

在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括

MySQL主从配置。使用INSERT实现数据的插入

UPDATE实现数据的更新

使用DELETE实现数据的删除

使用SELECT查询数据以及。

插入数据insert

1. 插入完整数据(顺序插入)

语法一:

INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);

语法二:

INSERT INTO 表名 VALUES (值1,值2,值3…值n);

2. 指定字段插入数据

语法:

INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);

3. 插入多条记录

语法:

INSERT INTO 表名 VALUES

(值1,值2,值3…值n),

(值1,值2,值3…值n),

(值1,值2,值3…值n);

4. 插入查询结果

语法:

INSERT INTO 表名(字段1,字段2,字段3…字段n)

SELECT (字段1,字段2,字段3…字段n) FROM 表2

WHERE …;

更新数据update

语法:

UPDATE 表名 SET

字段1=值1,

字段2=值2,

WHERE CONDITION;

示例:

UPDATE mysql.user SET password=password(‘123’)

where user=’root’ and host=’localhost’;

删除数据delete

语法:

DELETE FROM 表名

WHERE CONITION;

示例:

DELETE FROM mysql.user

WHERE password=’’;

练习:

更新MySQL root用户密码为mysql123

删除除从本地登录的root用户以外的所有用户

查询数据select(单表查询)

单表查询语法

SELECT DISTINCT 字段1,字段2... FROM 表名

WHERE 条件

GROUP BY field

HAVING 筛选

ORDER BY field

LIMIT 限制条数

关键字执行的优先级

from

where

group by

select

distinct

having

order by

limit

1.找到表:from

2.拿着where指定的约束条件,去文件/表中取出一条条记录

3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组

4.执行select(去重)

5.将分组的结果进行having过滤

6.将结果按条件排序:order by

7.限制结果的显示条数

简单查询

准备的表

company.employee

员工id id int

姓名 emp_name varchar

性别 sex enum

年龄 age int

入职日期 hire_date date

岗位 post varchar

职位描述 post_comment varchar

薪水 salary double

办公室 office int

部门编号 depart_id int

#创建表

create table employee(

id int not null unique auto_increment,

emp_name varchar(20) not null,

sex enum('male','female') not null default 'male', #大部分是男的

age int(3) unsigned not null default 28,

hire_date date not null,

post varchar(50),

post_comment varchar(100),

salary double(15,2),

office int, #一个部门一个屋子

depart_id int

);

#查看表结构

mysql> desc employee;

+--------------+-----------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+--------------+-----------------------+------+-----+---------+----------------+

| id | int(11) | NO | PRI | NULL | auto_increment |

| emp_name | varchar(20) | NO | | NULL | |

| sex | enum('male','female') | NO | | male | |

| age | int(3) unsigned | NO | | 28 | |

| hire_date | date | NO | | NULL | |

| post | varchar(50) | YES | | NULL | |

| post_comment | varchar(100) | YES | | NULL | |

| salary | double(15,2) | YES | | NULL | |

| office | int(11) | YES | | NULL | |

| depart_id | int(11) | YES | | NULL | |

+--------------+-----------------------+------+-----+---------+----------------+

#插入记录

#三个部门:教学,销售,运营

insert into employee(emp_name,sex,age,hire_date,post,salary,office,depart_id) values

('egon','male',18,'20170301','老男孩驻沙河办事处外交大使',7300.33,401,1), #以下是教学部

('alex','male',78,'20150302','teacher',1000000.31,401,1),

('wupeiqi','male',81,'20130305','teacher',8300,401,1),

('yuanhao','male',73,'20140701','teacher',3500,401,1),

('liwenzhou','male',28,'20121101','teacher',2100,401,1),

('jingliyang','female',18,'20110211','teacher',9000,401,1),

('jinxin','male',18,'19000301','teacher',30000,401,1),

('成龙','male',48,'20101111','teacher',10000,401,1),

('歪歪','female',48,'20150311','sale',3000.13,402,2),#以下是销售部门

('丫丫','female',38,'20101101','sale',2000.35,402,2),

('丁丁','female',18,'20110312','sale',1000.37,402,2),

('星星','female',18,'20160513','sale',3000.29,402,2),

('格格','female',28,'20170127','sale',4000.33,402,2),

('张野','male',28,'20160311','operation',10000.13,403,3), #以下是运营部门

('程咬金','male',18,'19970312','operation',20000,403,3),

('程咬银','female',18,'20130311','operation',19000,403,3),

('程咬铜','male',18,'20150411','operation',18000,403,3),

('程咬铁','female',18,'20140512','operation',17000,403,3)

;

#ps:如果在windows系统中,插入中文字符,select的结果为空白,可以将所有字符编码统一设置成gbk

准备表和记录

#简单查询

SELECT id,emp_name,sex,age,hire_date,post,post_comment,salary,office,depart_id

FROM employee;

SELECT * FROM employee;

SELECT emp_name,salary FROM employee;

#避免重复DISTINCT

SELECT DISTINCT post FROM employee;

#通过四则运算查询

SELECT emp_name, salary*12 FROM employee;

SELECT emp_name, salary*12 AS Annual_salary FROM employee;

SELECT emp_name, salary*12 Annual_salary FROM employee;

#定义显示格式

CONCAT() 函数用于连接字符串

SELECT CONCAT('姓名: ',emp_name,' 年薪: ', salary*12) AS Annual_salary

FROM employee;

CONCAT_WS() 第一个参数为分隔符

SELECT CONCAT_WS(':',emp_name,salary*12) AS Annual_salary

FROM employee;

结合CASE语句:

SELECT

(

CASE

WHEN emp_name = 'jingliyang' THEN

emp_name

WHEN emp_name = 'alex' THEN

CONCAT(emp_name,'_BIGSB')

ELSE

concat(emp_name, 'SB')

END

) as new_name

FROM

employee;

where约束

where字句中可以使用:

\1. 比较运算符:> < >= <= <> !=

\2. between 80 and 100 值在80到100之间

\3. in(80,90,100) 值是80或90或100

\4. like 'e%'

通配符可以是%或_,

%表示任意多字符

_表示一个字符

\5. 逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not

#1:单条件查询

SELECT emp_name FROM employee

WHERE post='sale';

#2:多条件查询

SELECT emp_name,salary FROM employee

WHERE post='teacher' AND salary>10000;

#3:关键字BETWEEN AND

SELECT emp_name,salary FROM employee

WHERE salary BETWEEN 10000 AND 20000;

SELECT emp_name,salary FROM employee

WHERE salary NOT BETWEEN 10000 AND 20000;

#4:关键字IS NULL(判断某个字段是否为NULL不能用等号,需要用IS)

SELECT emp_name,post_comment FROM employee

WHERE post_comment IS NULL;

SELECT emp_name,post_comment FROM employee

WHERE post_comment IS NOT NULL;

SELECT emp_name,post_comment FROM employee

WHERE post_comment=''; 注意''是空字符串,不是null

ps:

执行

update employee set post_comment='' where id=2;

再用上条查看,就会有结果了

#5:关键字IN集合查询

SELECT emp_name,salary FROM employee

WHERE salary=3000 OR salary=3500 OR salary=4000 OR salary=9000 ;

SELECT emp_name,salary FROM employee

WHERE salary IN (3000,3500,4000,9000) ;

SELECT emp_name,salary FROM employee

WHERE salary NOT IN (3000,3500,4000,9000) ;

#6:关键字LIKE模糊查询

通配符’%’ 匹配多个字符

SELECT * FROM employee

WHERE emp_name LIKE 'eg%';

通配符’_’ 匹配一个字符

SELECT * FROM employee

WHERE emp_name LIKE 'al__';

group by

单独使用GROUP BY关键字分组

SELECT post FROM employee GROUP BY post;

注意:我们按照post字段分组,那么select查询的字段只能是post,想要获取组内的其他相关信息,需要借助函数

GROUP BY关键字和GROUP_CONCAT()函数一起使用

SELECT post,GROUP_CONCAT(emp_name) FROM employee GROUP BY post;#按照岗位分组,并查看组内成员名

SELECT post,GROUP_CONCAT(emp_name) as emp_members FROM employee GROUP BY post;

GROUP BY与聚合函数一起使用

select post,count(id) as count from employee group by post;#按照岗位分组,并查看每个组有多少人

聚合函数

#强调:聚合函数聚合的是组的内容,若是没有分组,则默认一组

示例:

SELECT COUNT(*) FROM employee;

SELECT COUNT(*) FROM employee WHERE depart_id=1;

SELECT MAX(salary) FROM employee;

SELECT MIN(salary) FROM employee;

SELECT AVG(salary) FROM employee;

SELECT SUM(salary) FROM employee;

SELECT SUM(salary) FROM employee WHERE depart_id=3;

HAVING过滤

#!!!执行优先级从高到低:where > group by > having

#1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。

#2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数

查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数

select post,group_concat(emp_name),count(id) from employee group by post having count(id) < 2

ORDER BY 查询排序

按单列排序

SELECT * FROM employee ORDER BY salary;

SELECT * FROM employee ORDER BY salary ASC;

SELECT * FROM employee ORDER BY salary DESC;

按多列排序:先按照age排序,如果年纪相同,则按照薪资排序

SELECT * from employee

ORDER BY age,

salary DESC;

1. 查询所有员工信息,先按照age升序排序,如果age相同则按照hire_date降序排序

select * from employee ORDER BY age asc,hire_date desc;

2. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资升序排列

select post,avg(salary) from employee group by post having avg(salary) > 10000 order by avg(salary) asc

LIMIT 限制查询的记录数

示例:

SELECT * FROM employee ORDER BY salary DESC

LIMIT 3; #默认初始位置为0

SELECT * FROM employee ORDER BY salary DESC

LIMIT 0,5; #从第0开始,即先查询出第一条,然后包含这一条在内往后查5条

SELECT * FROM employee ORDER BY salary DESC

LIMIT 5,5; #从第5开始,即先查询出第6条,然后包含这一条在内往后查5条

使用正则表达式查询

SELECT * FROM employee WHERE emp_name REGEXP '^ale';

SELECT * FROM employee WHERE emp_name REGEXP 'on$';

SELECT * FROM employee WHERE emp_name REGEXP 'm{2}';

小结:对字符串匹配的方式

WHERE emp_name = 'egon';

WHERE emp_name LIKE 'yua%';

WHERE emp_name REGEXP 'on$';

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/43316.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息