2.3MySQL 操作 查询

1 连接其他人mysql数据库

mysql -p root -h ip地址

2.创建数据库-创建表-更改表结构-更改表数据

--create database 数据库名字 # 创建数据库

--use 数据库名   # 进入数据库

--create table 表名(字段名 类型 [约束]...) 创建表

-----约束:主键:primary key 唯一:unique 非空:not null 默认值:default 检查:通过枚举enum 达到限制的作用

--alter table 表名 add 字段 类型 (约束) #增加表中的字段

--alter table 表名 drop 字段 #删除表中字段

--alter table 表名 change 原 新 数据类型 约束 # 修改字段名

--删除表: drop table 表名  # 表结构已删除

--增加表数据:insert 表名(字段名,...) values(值1,...)

--更改表数据: update 表名 set 字段=新值 [where 条件]

--将手机号为null的学生 年龄-1并性别改成女

如:update student2 set age=age-1,gender='女‘ where phone is null; 

--删除表中所有数据,并保留表结构

delete from student2;

--删除女生小坤坤

delete from student2 where gender='女’ and name='小坤坤‘

3.约束:外键 foreigh key  

alter table employee add constraint fk_deptno foreigh key(deptno) references department(id)

添加1个约束,约束名:fk_deptno,类型foreign key,加到deptno字段上,当加数据时,去department的表里的id字段看下是否有符合的数据。

#fk_deptno 给外键取的名字,一般以fk开头


4. 查询

(1)--查询:* 表中所有字段

select * from emplyee;

(2)--查询指定字段

select * from ename,ebonus,ebsalary from employee;

(3)--根据指定条件查询 select 字段名 from 表名 where 条件

1) where 条件之运算符 >    <     >=   <=   不等于:<>  !=

2)between    and   限制区间

3)in() 区间  not in() 

4)null有关判断: 字段名 is null / 字段名 is not null

IFNULL(ebonus,0)  如果ebonus的值是null,会替换成0

例如:


5)逻辑: and和  or或 not非

and 和between例:

select * from employee where ebsalary>10000 and ebsalary<15000;

select * from employee where ebsalary between 10000 and 15000;  # (包含左右两边)

补充-- char_length(str) 获取字符串的长度

mysql> select * from employee where char_length(ename) = 3;

# 多个and 和or的优先级顺序:

补充 找出2017年入职的员工

mysql> select * from employee where ehiredate like '2017-%';

mysql> select * from employee where ehiredate regexp '^2017';

mysql> select * from employee where year(ehiredate)=2017;

补充 and 和 or的运算顺序

in例:

将5,7,2,9的奖金设置成null:

update employee set ebonus=null where eno=2 or eno=5 or eno=7 or eno=9;

等同于:update employee set ebonus=null where eno in (2,5,7,9)

6)模糊查询:like  通配符:_任意1个字符   % 任意多个字符

例:查询名字中有‘飞字的员工

select * from employee where ename like'%飞%’;

7)排序 order by  默认升序,也可以降序:order by 字段 desc

降序 例:select * from employee order by eage desc;

降序 例:select * from employee where ebonus+esalary>9000 oder by ebonus+ebsalary desc;

5.LIMIT  获取部分记录

(1)-- limit n : 获取前n条记录

例:select * from employee LIMIT 5; 

(2)limit offset,n :获取偏离量后n个数据

OFFSET 表示的是偏移量 n本次查询要获取的数据

例:select * from employee limit 5,5;

例:-- 共有100,15条一页,想得到第3页 

select * from employee limit 30,15;

例: 第五页 

select * from employee limit 60,15;


6. distinct 去重

-- 获取employee表中所有的职位(去除重复的)

select distinct ejob from employee;


7 as 起别名  使用as起别名可以辅助查询结果得查看,起的别名可以与order by结合使用但是 在where中使用报错

例:查询员工姓名和总工资,并按照总工资排序

select ename as 姓名,ebsalary+IFNULL(ebonus,0) as 总工资 from employee where ebsalary+IFNULL(ebonus,0)>10000 order by 总工资;


8 -- 聚合函数: max()最大值,min()最小值,sum() 求和,avg()平均值,count()计数 # count(*)代表返回的数据有多少行(条)默认可以都用*

例:查询员工表的最大年龄

select eage from employee order by eage desc limit 1;

select max(eage) from employee;

例:-- 查询3号部门有多少位员工

select count(eno) from employee where deptno=5;

select count(*) from employee where deptno=5;

例:-- 查询姓王的员工人数

select count(*) from employee where ename like '王%';

例:-- 查询女生的薪资总和

SELECT SUM(ebonus+ebsalary) from employee where esex='女'


9 (1)分组查询:select 字段,... from 表名 where 条件 group by 字段 [having 字段][order by 字段] [limit n] 

-- *** where ...group by ... 先筛选再分组

-- ***  group by ... having ...  先分组后筛选

-- having 不能独立存在,必须结合group by使用

例:-- 查询employee表中男女的人数

select esex, count(*) as number from employee group by esex;

-- sex 人数

-- 男  5

-- 女  6

例:-- 查询4号部门各个职位的最低工资低于3000元的职位

select ejob,min(ebsalary) as 最低底薪 from employee where deptno=4 group by ejob having 最低底薪<3000;

例:-- 查询各个部门的男女生人数

select deptno,esex,count(*) from employee group by deptno,esex ORDER BY deptno;


9.(2)子查询:嵌入到其他查询语句中查询语句



你可能感兴趣的:(2.3MySQL 操作 查询)