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)子查询:嵌入到其他查询语句中查询语句