练习命令语句和python的控制代码
1 MySQL的命令不区分大小写,在win下查询内容也是不区分的,在linux下是区分的,可以如下设置
MySQL建库时用小写,存储默认是大写,提取时大小写均可,对性能没有影响。关键字不区分,查询内容区分,表明不区分。

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

1、数据库名与表名是严格区分大小写的;
2、表的别名是严格区分大小写的;
3、列名与列的别名在所有的情况下均是忽略大小写的;
4、变量名也是严格区分大小写的;

MySQL在Windows下都不区分大小写。

MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,这个字符集对大小写不敏感,因此在比较过程中中文编码字符大小写转换造成了这种现象。

A.表名区分大小写

在my.conf加入:
ower_case_table_names = 0
其中 0:区分大小写,1:不区分大小写

B.插入查询时区分大小写

字段值需要设置BINARY属性,即可区分大小写。

设置的方法有多种:
创建时设置:

CREATE TABLE T(
 A VARCHAR(10) BINARY
 );

使用alter修改:
ALTER TABLE tablename MODIFY COLUMN cloname VARCHAR(45) BINARY;

mysql table editor中直接勾选BINARY项。

2大小写习惯,就形成一个全部用大写来书写数据库名,表名和列的头,内容不需要管。

3表管理

1表名要求
不能使用关键字
必须以字母-开头
不能超过128字符

2字符型
char 定长 最大8000字符**(非unicode)** 在数据有个字段的长度能确定,则使用char,这样查找的时候会快速
char(10) 小韩, 前四个字符放小韩,后六个使用6个空格补齐
varchar 变长 最大8000字符 非unicode
varchar (10) 小韩 只分配四个字符,可以节省空间
ntext 可变长度Unicode可变长度unicode编码 最大为2的30次方-1
text 可变长度的
非unicode
编码,最大长度为2的31次幂-1
区别 ntext字节是存储
英文的,也可以存储中文但会出现显示成乱码
ntext是多字节格式存储的unicode的,存储
中文**

unicode 编码,用两个字节表示一个字符(汉字和英文)对汉字支持好utf-8
非unicode编码,用一个字节表示字母,二个表示一个汉字

3 主键
最好给一个表定义一个主键,主键的值是唯一的,不能有两个一样的主键值在一个表里面,主键必须要有值,主键值可以修改成其他的值,注意该值不能冲突

4插入部分字段
insert和update

4基本查询
1外键,指的是和一个表的主键相关联的一项
主键,各个数据库的创建语法不一样,注意区分
外键只能指向主键外键和主键的类型要一致

2查询所有列
select* from emp(表名) where条件
3-- 查询BOB的薪水和员工号alter
select empno,sal from emp where ename=‘BOB’;
4-- 如何取消重复行,diatinct 只能消除完全一样的行,
select distinct字段 from表名 where
5–使用计算式
如何处理空null值,有函数可以进行判断,如为空则输出0 ifnull(comm,0)
– 显示每个雇员的年工资
select ename,sal12+comm13 from emp ;
select ename ifnull(comm,0)from emp
6使用where语句
– 如何显示工资高于1700的员工
select ename,sal from emp where sal >1000;
– 如何查找工资在2000到3000的人
select from emp where sal>800 and sal<4000;
select * from emp where sal between 800 and 4000;
7like 模糊查询
%代替任意数量种类字符, _代表一个
– 员工名为S开头的
select * from emp where ename like ‘S%’;
8使用in 关键词
– 查询empno为12,7369 或7800的员工
select * from emp where empno in (12, 7369, 7800);
9 is null查询
select * from emp where empno is null;
10使用逻辑符号
– 查询工资高于500或者岗位是CLECK,同事还要满足他们的姓名首写为C
select ename from emp where (sal > 500 or job=‘CLECK’) and ename like ‘C%’;
11使用order by 字句,按顺序
– 按照工资由低到高排
select * from emp order by sal asc;
select * from emp order by sal desc
– order by 可以根据不同的字段排序
– 要求按照部门号升序排列再按照薪水降序排列部门里
select * from emp order by deptno asc,sal desc;

12使用列的别名排序
查询结果处理后再输出,比如年薪,他是没有列名字的,如果要为其添加名字则使用别名输出使用
– 使用别名输出
select sal
12 yearsal from emp order by yearsal;

5 复杂查询
1较为复杂的select语句
1数据分组 max,min,avg count sum
– 显示工资最低的雇员
select min(sal) minsal from emp;
– 计算平均工资和总工资
select avg(sal) pimhjun, sum(sal) alsal from emp;
– 一共多少个员工
select count(ename) from emp;
2 sql语句是从右向左的执行,先执行右边的语句,其输出再执行左边的
能迅速排查的语句放在右边写,以此来提高效率
– -显示工资高于平均工资的员工名
select ename from emp where sal>(select avg(sal) from emp);
3group by 和having
– 显示每个部门的平均工资
select avg(sal) from emp group by deptno;
– 显示每个部门的每种岗位的平均工资和最低工资
select avg(sal),deptno ,min(sal),job from emp group by deptno , job;
4having和group by结合使用,对查询结果进行筛选
– 显示平均工资低于3000的部门的部门号和他的平均工资
select deptno ,avg(sal) from emp group by deptno having avg(sal)<3000;

分组后的条件使用 HAVING 来限定,WHERE 是对原始数据进行条件限制。几个关键字的使用顺序为 where 、group by 、having、order by ,例如:

SELECT name ,sum() FROM employee_tbl WHERE id<>1 GROUP BY name HAVING sum()>5 ORDER BY sum(*) DESC;

group by后面的数据一定要是select后面中的一个
5 多表查询
6维护数据完整性
7修改表

明天继续