day 37-8 关于mysql 的增 删 改 查 及联合列表

时间:2023-03-08 16:55:15
day 37-8  关于mysql 的增 删 改 查 及联合列表

1      VARCHAR : 字符串的意思 (括号内的数字代表尾数) 输入的字符串在这个范围内都行

CHAR  :字符串的意思(区别就有几位数字 必须写几位)

INT   整数(位数) 输入的数字在范围内都行 最长是10位  后边括号数字可以不加

BIGINT 整数(位数)  最长是20位

FLOAT 小数(位数) 输入的数字在范围内都行

2 创建数据库两种方法

第一种 右击 新建

第二种  输入命令: CREATE  DATABASE  +库名

CREATE  DATABASE  WANGLUO

Schema  数据库对象集合

3 建立列表的格式有两种方式

新建列表的是的主键   PRIMARY KEY   表示 这个不能重复 一般在id 上

DOUBLE(10,2)  最大数字是10位  小数最多占2位

第一种 在列表处 右击新建 然后 按照要求写

第二种  点击要操作的数据库  然后 查询   新建查询  输入命令:

例如  name  sex  age

create table 列表名(name VARCHAR(10)  NOT NULL PRIMARY KEY ,sex CHAR(2)

NOT NULL, age int(10)) 列表名完成

例如 新建王岩练习2 的列表名  p_id ,p_name,p_age,p_menpai,p_leader ,p_sal

第一步建表

create table 王岩练习2(

p_id VARCHAR(19) not null PRIMARY KEY

,p_name VARCHAR(19) not null

,p_age INT not null

,p_menpai VARCHAR(19) not null

,p_leader VARCHAR(19) not null

,p_sal DOUBLE(10,2) not null)

第二步上传就是 insert into 王岩练习()或者( p_id ,p_name,p_age,p_menpai,p_leader ,p_sal)values('p001','张三','100','武当','p001','10000'),或者

('p002','张无忌','20','明教','0','8000'),

('p003','岳不群','40','华山','0','6500'),

('p004','东方不败','35','日月神教','0','12000'),

('p005','令狐冲','21','明华山','p003','4000'),

('p006','林平之','18','华山','p004','2000'),

('p007','左冷禅','50','嵩山','0','10000'),

('p008','','46','武当','p004','10000'),

('p009','张远桥','55','武当','p005','6500');

4增加一个字符段

insert into +列表名 (列表的格式分别用英文逗号隔开)values(一 一相对应填入值);

INSERT INTO `王岩练习` (p_id,p_name,p_age,p_menpai,p_leader,p_sal) VALUES

('p001','张三','100','武当','p001','10000');

5删除delete  删除具体的

delete   from  +表名+ 条件where 字符段 = 内容

DELETE FROM 王岩练习 WHERE p_name ='张三'

drop 删除列表

drop table +l列表名;(后边以分号结尾)

DROP TABLE`ren员表`;

drop 删除数据库

drop database 库名;

DROP DATABASE wangluo;

6 改  update +l列表名 set 字符段 = ‘更改后的名字’ where 字符段= ’更改前的名字‘

UPDATE  `王岩练习` SET p_name= '张三丰' where p_name= '张三'

7 查询

问题1 单条件查询50岁以上的人

selec  * from 列表名 +条件 字符段 >= 50

SELECT * FROM `王岩练习` WHERE p_age >=50;

问题2  双条件查询  50岁以上并且工资10000以上的

select * from 列表名 +条件  p_age >= 50 and p_sal >10000

SELECT * FROM `王岩练习` WHERE p_age>50 AND p_sal >8000;

此时 的and 也可以用符号 但是必须是 双的  &&

问题2 -1  补充的  问题 工资在5000 在8000之内的 运用between

SELECT * FROM `王岩练习` WHERE p_sal  BETWEEN 5000 AND 8000:

问题3  or的用法 省略   但是 必须是 ||

问题4  找人的名字 模糊查找的用法 用like

selec  * from 列表名 +条件  like  (模糊的名字)

SELECT * FROM `王岩练习` WHERE p_name LIKE '张%'

张% :  张某某     ,%张: 某某张

问题5  同时包含几个内容的 需要in

select * from 列表名 +条件字符段 in(字符段1,字符串2,字符段3)

SELECT * FROM `王岩练习` WHERE p_menpai in('武当','华山','嵩山')

问题6  正序 倒叙的问题 order by   正序 asc   倒叙desc

SELECT * FROM `王岩练习` ORDER BY p_sal ASC;

SELECT * FROM `王岩练习` ORDER BY p_sal DESC;

问题7 等于 21岁以上的人 他的*是谁

select p_leader from   '王岩练习'   where p_age ='21'       结果p003

selcet * p_id  from  '王岩练习'  where p_id = p003;

第二种 ;SELECT * FROM `王岩练习` WHERE p_id=(SELECT p_leader FROM `王岩练习` WHERE p_age ='21');

逻辑上的运算   不等于      <>    或者       !=(这个很少用)

-----------------------------

COLUMNS   ,设置网格的列数,设置列间距

查看 数据表结构   show COLUMNS from 表名字

alter  改变

更改表明    alter table table_name rename table_new_name

charset   字符集,字符编码

新建一个utf - 8 的数据库

create database luodandan charset utf8;

更改一个数据的格式为gbk

ALTER DATABASE luodandan CHARSET gbk;

查询 (核心);

1 查询所有;

select * from 表名;

* 代表素有 from 表示选取哪个表查询

最好把* 换成具体的字符段(字符段就是 建表时候那个 参数  nam varchar(10)  not null)

SELECT * from wytext;

2 查询某两个字段

select  字段1,字段2  from 表名

SELECT p_name,p_sal from wytext;

3根据条件查询

select  * from  表名  where 字段 = '值'

where ;表示条件  跟在where 后边的统称值为条件

SELECT * FROM wytext WHERE p_age > 50;

4 多条件查询

select * from 表名 where 字段 1= 值1 and (or)  字段2 = 值2  and(or) 字段 3=值3;

and 并且符号&  or 或者的意思 | 但是此时的符号 必须是两个  &&     ||

SELECT * FROM wytext WHERE p_age>'50' AND p_sal>='10000'AND p_menpai ='武当';

5 逻辑运算查询

select * from  表名 where 字段1 <> 值1 and  字段2 > 值2;

逻辑运算符  ;  = , (!=, <>),  >, <, >=, <=

SELECT * FROM wytext WHERE p_age <> '50' AND p_sal >'10000'

6 模糊查询   like

select * from 表名  where 字段 like '%字段%'

‘’字段%   表示 字段头xxx

'%字段'  表示字段结尾 xxx字段

%字段%  包含的字段   xx字段xxx

select * from wytext where p_menpai like '%派%';

7 集合查询(自己理解就是查多个字段的值)

select  * from 表名  where  字段 in(值1,值2,值3,值4);

SELECT * FROM wytext WHERE   p_menpai in('派森派','明教','日月神教','武当');

8 区间查询

select * from 表名 where 字段 betwee 值1 and 值2;

两个之间  between and   而且 属于包含的意思(比如说数字)

SELECT * FROM wytext WHERE p_sal BETWEEN  '10000' and '12000'

9 排序  正序 ORDER BY   字段  ASC     倒叙 ORDER BY  字段 DESC

注意 无论是倒叙 还是正序 都是条件  和where 不能同时存在

select *  from 表名 where  ORDER BY 字段(asc)or desc

SELECT * FROM wytext ORDER by p_age ASC;

10 嵌套查询

select *from 表名 where 字段in(select 字段 from 表名 where  id = 值  )

注意 () 括号优先

遇到= 值唯一 晕倒in的值  集合

找得是21岁的那人  他的领导是谁

SELECT * FROM wytext where p_id in(SELECT p_leader FROM wytext WHERE p_age = '21')

答题继续;

11  当前工资最高的人员

最高  max()

select max(p_sal)  as  ’起别名 ‘from 表名;

注意 as ‘起别名’ 这个可以不用写

SELECT MAX(p_sal) as p_sal FROM wytext;  这个是工资最高的是多钱  15000

SELECT p_name FROM wytext WHERE p_sal=(SELECT MAX(p_sal) as p_sal FROM wytext);

12   当前工资最高的人员

最低 min()

select min(p_sal) from 表名;

select min(p_sal) from wytext ;

select p_name from wytext  where p_sal = (select min(p_sal) from wytext );

13 查询所有人的平均工资

平均值  avg()

SELECT avg(p_sal)FROM  wytext;

14  查询所有人员的工资的总和

sum()  总和

select sum(p_sal) from wytext;

15  查询目前有多少个人员

count()  数数量

select COUNT(p_id)from wytext;

16 查询各门派的平均工资

分组 group by 字符段

select avg(p_sal) ,p_menpai from wytext group by p_menpai;

as 的使用情况 更明晰

select avg(p_sal)as '平均工资', p_menpai as '门派' from wytext group by p_menpai;

按照顺序  注意 这个顺序 最一定放在最后

ordr by  字段

select avg(p_sal),p_menpai,p_name from wytext GROUP BY p_menpai order by avg(p_sal) asc;

17 查询武当派的最高工资的是谁

思路 先找人-----工资最高   -------武当派

注意 (select max(p_sal) from wytext where p_menpai = '武当' ) 结果是个工资的最大值

SELECT p_name FROM wytext WHERE p_sal = (SELECT MAX(p_sal) FROM wytext WHERE p_menpai= '武当')and p_menpai = '武当'

18武林中有哪些门派

SELECT p_menpai FROM wytext ;    ##  表示每个人对应的门派

SELECT p_menpai FROM wytext  GROUP BY p_menpai;   ##  group by 分组  意思就几个人对应的一组    出来就是单纯的组

19查询当前武林有哪些门派和门派的平均工资

select p_menpai ,AVG(p_sal )from wytext  GROUP BY p_menpai;

20 查询当前人员中的第3条到第7条的数据

limit  表示分页  limit(x,y)

x  按照索引 取值 x=1 时候  从2取值

y 就是本页句有y 个值   每次查询y条数据

select * FROM wytext limit 2,5

21查询没有门派的人员有哪些

主要是表里面 那个有没有null

SELECT * FROM wytext WHERE p_menpai is null;    ## 前提是建表时 p_menpai 设置时候就是not null

SELECT * FROM wytext WHERE p_menpai='';    修改的时候必须是=  不能is

UPDATE wytext set p_menpai = NULL WHERE  p_id='p008'  这个是在没有设置  not null

22 查询武当派下有哪些小弟

-- SELECT * FROM wytext WHERE p_leader=(SELECT p_id FROM wytext WHERE p_menpai = '武当'AND p_leader='0')

SELECT * FROM wytext WHERE p_menpai = '武当'and p_leader <> '0';   注意引号

23  各门派的工资总和 并排序

条件 group by +字段    order by  字段+顺序

SELECT SUM(p_sal),p_menpai FROM wytext GROUP BY p_menpai ORDER BY SUM(p_sal) ASC;

24  查询人员并显示门派所在位置(多表联合查询)

select * from 表1 ,表2 条件 where 表1.共同字段= 表2.共同字段 ;

select * from wytext, wei where  wytext.p_menpai = wei.a_name;

注意:如果多表联合查询不加条件则会出现(笛卡尔乘积)  就是 表1的行数 x表2的行数

注意:在使用多表联合查询时,一定要加条件

结果:符合两个表条件的结果

25 查询人员表 如果人员表,如果人员门派在位置则显示位置信息,不存在则不显示位置

则不显示位置

select * from  wytext left join wei on  wytext.p_menpai = wei.a_name

注意 on 表示条件 专门配置 left join来使用

特点左表数据全要,右表的数据与左表数据相匹配则显示,不匹配则以null 填写

26 查询位置表 如果人员的门派 位置信息则显示人员,没有则不显示。

select * from wytext right  join wei on wytext.p_menpai = wei.a_name;

27 查询登记了地址位置的门派人员信息

select * from wytext inner join wei on wytext.p_menpai = wei.a_name