DQL语句下

1.数据库三范式(设计表的原则) NF:normal form

说明: 严格意义上,有5NF; 1NF,2NF,3NF,4NF,5NF;BCNF;

  • 第一范式(1NF)
    1NF的定义为:符合1NF的关系中的每个属性都不可再分
    1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RDBMS),例如SQL Server,Oracle,MySQL中创建数据表的时候,如果数据表的设计不符合这个最基本的要求,那么操作一定是不能成功的。

    学号 班级 姓名 系名 系主任 课程 语文 高数 英语

    只满足1NF会有问题:数据冗余过大,插入异常,删除异常,修改异常;
    冗余: 相同数据重复出现
    插入问题: 3月份新开一个系,但是没有学生和班级; 如何插入数据?
    删除问题: 某个班级不存在了,学生和系信息怎么办?
    修改问题: 如果李四转到英语系,涉及到多条数据更改

  • 第二范式(2NF)
    2NF的定义为: 主键依赖,该表里面的其他字段,必须和主键相关;
    即一张表格只描述一个对象(主键),其它列名(副键)与对象之间相互完全依赖。

    生产一批香蕉,需要给香蕉进行记录,以便追踪去了哪里;首先给每把香蕉进行编号,然后描述他的颜色,成熟度,香味等;

  • 第三范式(3NF)
    3NF的定义为: 主键以外的字段,不能有相互依赖的关系;

    比如,你想要对香蕉进行【编号】、【颜色】、【香味】、【香味得分】、【香味评级】这种列名,那么你要另开一张专门描述香味的表格。

    比如,你想要做【学号】、【姓名】、【性别】、【班级】、【班主任】这种列名,由于【班主任】受【班级】影响,那么你要另开一张专门描述班级的表格。

2.DQL语句 ; 绝对不会影响我们数据库的存储

  • 语法:SELECT列名FROM表名【WHERE–>GROUP BY–>HAVING–>ORDER BY–>LIMIT】

  • 组合使用,必须按照这个顺序来;

SELECT selection_list/要查询的列名称/
FROM table_list/要查询的表名称/
WHERE condition/行条件
GROUP BY grouping_columns/对结果分组/
HAVING condition/分组后的行条件
ORDER BY sorting_columns/对结果排/序
LIMIT offset_start, row_count/结果限定/

2.1 基本查询
  • select * from test
    select 字段1,字段2 from test
    select distinct 字段 from test – 字段去重查询,非分组

  • 给字段取别名
    select 字段1 别名1, 字段2 别名2 from test
    select 字段1 as 别名1 , 字段2 as 别名2 from test

2.2 条件查询; 带上 where,给定条件查询; 条件是可以组合的; where用在 update delete
  • 比较运算符
    = != > < >= <= ;
    between A and B;
    in(值1,值2,值3);
    is null;
    is not null;
    关系运算符
    and or not;

  • 判断时,可用算数运算符;

      • / %; ifnull(x,0); 如果x是null,用0替换;
2.3 模糊查询
  • 通配符
    _ : 代表一个字符
    % : 代表任意字符
2.4 排序
  • order by 字段 asc/desc
    order by 字段1 asc, 字段2 desc
2.5 聚合函数
  • count(); 统计不为null的行数
    max(); 求字段的最大值
    min(); 求字段的最小值
    sum(); 求字段和
    avg(); 求字段的平均值
    #当前日期 curdate();
    #当前时间 curTime();
    #当前日期和时间 NOW();
2.6 分组查询
  • group by 字段; 根据字段来分组;
​ 2.7 分页查询
  • limit 纪录起始位置,纪录条数;
​ 2.8 连接查询(关系)
  • 内连接: inner join

select * from A,B
select * from A inner join B on A.b = B.b – SQL标准语法

  • 外连接: 左右外连接

select * from A left join B on A.b = B.b
select * from A right join B on A.b = B.b

  • 案例:
    teacher/class/ teacher_class 三表的连接查询; 查看某某老师负责哪些班级授课
2.9 子查询;
  • 查询里面有查询;

3: 数据库导入导出(sqlyog)

  • 备份:
    mysqldump -u root -p lhp>d:\lhp.sql
    密码过后输入
    mysqldump -u root -proot lhp>d:\lhp.sql

  • 恢复:
    前提:必须先创建数据库
    需先登录mySQL,进入指定数据库后执行SQL
    Source d:\lhp.sql

  • 还有一种方式
    Mysql -uroot -proot lhp

你可能感兴趣的:(笔记,java)