数据库操作语句:

常用数据类型:
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
char:固定长度字符串类型; char(10) 'aaa ' 占10位
varchar:可变长度字符串类型; varchar(10) 'aaa' 占3位
text:字符串类型;
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
常用约束:
主键约束:primary key
唯一约束:unique [key]
非空约束:not null
默认约束:default
外键约束:foreign key
自动增长:auto_increment
DROP TABLE语句用于删除现有表
DDL使用:
1.查看数据库的个数和某个数据库,以及查看当前使用的数据库
    show databases;
    show database dbname;
 select database;
2.使用指定或者切换数据库
 use dbname;
3.删除数据库
 drop database dbname;
4.创建表和删除表
 create table employee
 (
  id int not null,
  age int not null,
  name String varchar(255),
  primary key(id)
 );
 
 drop table table_name;
5.查看当前使用的数据库的所有表 和 查看表的字段内容
 show tables;
 decs table_name;
数据库表操作:
1.增加表列
    alter table employee add reward int(20);
2.修改表
 alter table employee modify 列名 列属性;//修改表列的长度
 alter table employee drop reward;//删除表列
 alter table employee character set gbk;//修改表的字符集为gbk 
 alter table employee change name username varchar(100);
3.修改表名
 rename table employee to user;
4.查看表格的创建细节
 show create table user;
DML操作:
DML是对表中的数据进行增,删,改,查的操作,不要与DDL混淆。
主要包括:insert update delete

小知识:
在mysql中,字符串类型和日期类型都要用单引号括起来。
空值:null
增加操作 INSERT:
1.根据表数据插入数据
    INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
    VALUES(1,'zhangsan','female','1990-5-10',10000,'2015-5-5-','goodgirl');

小知识:

查看数据库编码的具体信息
    Show variables like ‘character%’;
临时更改客户端和服务器结果集的编码
 Set character_set_client=gbk;
 Set character_set_results=gbk;
或者
 SET NAMES ‘gbk’;
修改操作 UPDATE:
1.修改所有员工的薪水
    update emp set salary = 5000 ;
2.修改姓名为'xxx'的员工的 薪水为3000;
 update emp set salary = 3000 where name = 'xxx';
3.修改姓名为'xxx' 的员工薪水为 4000,gender 改为 ‘ccc’
 updatte emp set salary = 4000,gender = 'ccc' where name = 'xxx';
4.将wu的薪水在原有基础上增加10000元
 update emp set salary =salary+1000 where gender = 'male';
删除操作 : DELETE :
1.删除表中的名称为’zs‘ 的记录
    delete from emp where name='zs';
2.删除表中所有的记录
 delete from emp;
3.使用truncate删除表中的记录
 TRUNCATE TABLE emp;
 1.delete 删除表中的数据,表结构还在,删除后的数据还可以找回
 2.truncate删除是把表直接drop掉,然后再创建一个同样的新表
 3.删除的数据不能找回,执行速度比delete块
DQL数据查询:
数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
查询返回的结果集是一张虚拟表

SELECT:

语法:SELECT 列名 FROM 表名 (where-->broup by -->having --> order by)
SELECT selection_list  要查询的列名
FROM   table_list      要查询的表名称
WHERE  condition       行条件
GROUP By   grouping_columns  对结果分组
HAVING condition       分组后的行条件
ORDER BY   sorting_columns   对结果分组
LIMIT offset_start,row_count 结果限定
简单查询:
1.查询所有列
    select * from stu;
2.查询指定列
 select sid,sname,age from stu;
条件查询:
条件查询就是在 查询时给出where子句,在where子句中可以使用如下运损及关键字:
=,!=,<>,<,<=,>,>=;
BETWEEN...AND;
IN(set);
IS NULL;
AND;
OR;
NOT;
1.查询学号为S_1001,S_1002,S_1003的记录   或者不为  not in
 SELECT * FROM stu
 WHERE sid IN ('S_1001','S_1002','S_1003');
2.查询年龄为null的记录
 select * from stu where age  is NULL;
3.查询年龄在20到40的学生记录
 1.WHERE age>=20 AND age<=40;
 2.WHERE age BETWEEN 20 AND 40;
4.查询性别非男的学生记录
 1.WHERE gender!='male';
 2.WHERE gender<>'male';
 3.WHERE NOT gender='male';
5.查询姓名不为null的学生记录
 1.WHERE NOT sname IS NULL;
 2.WHERE sname IS NOT NULL;
模糊查询:
关键字:LIKE
通配符:
    _任意一个字母
 %任意0-n个字母
 '张%'

句式
select * from stu where 姓名等 like '-';
包含a '%a%' 
第二个字母为i '_i%'
以z开头 'z%'

 字段控制查询:

1.去重复:
    select distinct sal from emp;
2.查看员工的月薪和佣金之和
 select *,sal+comm from emp;
 select *,sal+IFNULL(comm,0) from emp;//comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL。使用了把NULL转换成数值0的函数IFNULL
3.给查询的列名添加别名as 可以省略
 select *,sal+IFNULL(comm,0) as 'total' from emp;
排序:
1.所有学生的年龄升序
    select * from stu order by sage ASC;
    select * from stu order by sage;
2.所有学生的年龄降序
 select * from stu order by sage DEsc;
3.查询所有员工,按月薪降序,月薪相同,按编号升序
 select * from stu order by sal DESC,empno ASC;

聚合

聚合函数:
聚合函数是用来做纵向运算的函数:
l COUNT():统计指定列不为NULL的记录行数;
2 MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
3 MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
4 SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
5 AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
l COUNT():统计指定列不为NULL的记录行数;

统计月薪与佣金之和大于2500元的人数:
select count(*) as cnt from stu where sal+IFNULL(comm,0) >2500;
查询有佣金的人数,以及有领导的人数:
select count(comm),count(mgr) from emp;
2 MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
3 MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

查询最高工资和最低工资
select max(sal),min(sal) from emp;
4 SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
5 AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

查看所有员工月薪和,以及所有雇员佣金和
select sum(sal),sum(comm) from emp;
查询所有员工月薪加佣金和:
select sum(sal+ifnull(comm,0)) from emp;
统计所有员工平均工资:
SELECT AVG(sal) FROM emp;
分组查询:
按部门查询工资和,按男女查询工资和

注意:
凡和聚合函数coun sum avg max min同时出现的列名,则一定要写在group by 之后
查询每个部门编号和每个部门工资和
select deptno,sum(sal)
from emp
group by deptno;
查询每个部门的部门编号以及每个部门的人数
select deptno,count(*)
from emp
group by deptno;
查询每个部门的部门编号以及每个部门工资大于1500的人数
select deptno,count(*)
from emp
where sal>1500
group by deptno;

HAVING子句

查询工资总和大于9000的部门编号以及工资和:
SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno
HAVING SUM(sal) > 9000;

注:having与where的区别:
1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
2.having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而
HAVING是对分组后数据的约束。
LIMIT:
查询5行记录,起始从0行开始
select * from emp limit 0,5;
查询10行记录,起始从3开始
select * from emp limit 3,19;

分页查询:
如果一页记录为10条,希望查看第3页记录应该怎么查呢?
l 第一页记录起始行为0,一共查询10行;
2 第二页记录起始行为10,一共查询10行;
3 第三页记录起始行为20,一共查询10行;
查询语句书写顺序:select – from- where- groupby- having- order by-limit
查询语句执行顺序:from - where -group by -having - select - order by-limit
实体完整性:
主键约束(primary key)
唯一约束(unique)
自动增长列(auto_increment)
主键的添加方式:
    创建表时 id int primary key
    创建表时 primary key(id)  优势,创建联合主键(两个或两个以上同时进行约束)
 建表之后 ALTER TABLE student ADD PRIMARY KEY (id);
唯一约束(unique)
    数据不能重复:CREATE TABLE student(
        Id int primary key,
     Name varchar(50) unique
    );
自动增长列(auto_increment)
    给主键添加自动增长,列只能是整数类型
     CREATE TABLE student(
   Id int primary key auto_increment,
   Name varchar(50)
   );
   INSERT INTO student(name) values(‘tom’);

域完整性:

域完整性约束:数据类型 非空约束(not null) 默认值约束(default)

Name varchar(50) not null,
Sex varchar(10) default ‘男’

引用完整性:

外键约束:FORRIGN KEY

添加方式一,建表时,一个表的主键是另一表的成员
添加方式二,ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(id);
多表查询:

1、合并结果集 union(去除重复) union all 2、连接查询 内连接 inner join on 外连接 outer join on 左外连接 left join 以左边的表为基准 左内连接 right join 以右边的表为基准 全外连接(mysql 不支持) full join 自然连接 natural join

连接查询心得: 连接不限与两张表,连接查询也可以是三张、四张,甚至N张表的连接查询。通常连接查询不可能需要整个笛卡尔 积,而只是需要其中一部分,那么这时就需要使用条件来去除不需要的记录。这个条件大多数情况下都是使用主外 键关系去除。 两张表的连接查询一定有一个主外键关系,三张表的连接查询就一定有两个主外键关系,所以在大家不是很熟悉连 接查询时,首先要学会去除无用笛卡尔积,那么就是用主外键关系作为条件来处理。如果两张表的查询,那么至少 有一个主外键条件,三张表连接至少有两个主外键条件。

子查询:

l 子查询出现的位置: a. where后,作为条为被查询的一条件的一部分; b. from后,作表; l 当子查询出现在where后作为条件时,还可以使用如下关键字: a. any b. all

课堂笔记:

1、mysql  int(10)
     int类型长度4个字节,大约表示2^32 数字,10代表的是显示长度,一般和FILLZERO 约束一起使用,如果没有达到该长度,填充0    2-->0000000002
    mysql  varchar  最大长度可以设置到65535,但是一般设置为255
    mysql  double,float      (5,2) 代表总长度是5,小数点是占两个长度
2、数据导入导出
       sql格式,xls格式
    
     将查询出来的数据制作成表格:
     select name,salary from worker into outfile 'C:/abc.xls';  

3、如何配置你的mysql 服务器允许远程连接。
     方法一:该表法
       找到MySQL数据库,找到user表,找到User=root,Host=localhsot的那条记录
     修改Host为%,重启MySQL服务
     方法二: 通过SQL语句
     grant all privileges  on *.* to root@'%' identified by "root"; // 赋权限
     flush privileges;  // 刷新权限

4、临时表中间表dual
     select 7*8 ; == select 7*8 from dual;
     作用只是为了语法合理,Oracle中该表不能省略。

5、数据库设计三大范式
     1)第一范式    表中的每个字段都是独立的,不可分割的单元
           user
             id             name     
              1           贾明灿|贾宝
           修改为    id     name    ex_name【曾用名】
     2) 第二范式    在满足第一范式的前体现
             一张表只能表示一个意思,每一个字段都要和主键有依赖关系
             employee
              id      name   age    sex   salary { deptName   deptNo }  违反了第二范式
              id      name    age   sex   salary   
              dept  部门表
               id      deptNo    deptName
              技术部  现在叫  研发部
     3)  第三范式   在满足第二范式的前体现
             一张表只能表示一个意思,除主键外每个字段都只能和主键有依赖关系
             employee
              id      name   age    sex   salary { deptName   deptNo }  违反了第二范式
              id      name    age   sex   salary   deptId   deptName    第三范式 设计和第二范式可以联合理解
              dept  部门表
               id      deptNo    deptName
              技术部  现在叫  研发部
             
      数据库设计的三大范式: 只是设计的规范,参考

6、联合查询

     UNION   : 合并结果集,去除重复的数据
     UNION  ALL :    不去重  
      前面查询出来的列数和后面的结果集查询出来的列数要相等,建议类型也相同