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