• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
知心夜雨
博客园    首页    新随笔    联系   管理    订阅  订阅

数据库学习

数据库

数据库:存储、维护和管理数据的集合。

数据库服务器、数据库和表的关系如图所示:

img

SQL(结构化查询语言)

1.1 SQL语句

  1. 创建数据库

    create database my_db1 character set utf8;

  2. 创建表

    create table tb_user(
    id int primary key,
    name varchar(15)
    )character set utf8;

  3. 添加数据

    insert into tb_user1(id,name) values(1,'张三');

    • 列名与列值得类型、个数、顺序要意义对应
    • 可以把列名当做java中的形参,把列值当做实参
    • 值不要超出定义的长度
    • 如果插入空值,使用null
    • 插入的日期和字符一样,都使用引号括起来
    • int类型的值不能使用引号括起来,字符串相关的类型才可以,引号是单引号
  4. 修改 表中数据

    update tb_user1 set name='王婆',address='南昌' where id=1;

  5. 删除表中数据

    delete from tb_user where id=1;

    delete * from tb_user where id=1;错误语法

  6. 查询语句

    1. 查询所有的列

      select * from tb_user1;

    2. 查询指定列

      select id,name from tb_user1;

    3. 按条件查询,就是在查询时给出where字句,在where字句中可以使用如下运算符及关键字:

      • = != <> < <= > >=

      • between...and..(在什么范围之前)

        /查询年龄在18-20之间的学生记录/
        select * from tb_user where age>=18 and age<=20;

      • in(set);(在什么里面)

        /查询学号是1001或者是1002或者是1003的记录/

        select * from tb_user where id in (1001,1002,1003);

      • is null; is not null

        /查询姓名为null的记录/
        select * from tb_user where name is null;

      • and (与)

      • or;(或)

      • not;(非)

  7. 取别名

    /取别名/
    select id as '编号',name as '姓名',age as '年龄',gender as '性别',department as '部门' from tb_user
    /简洁版/
    select id '编号',name '姓名',age '年龄',gender '性别',department '部门' from tb_user

    /给表取别名/
    select a.name from tb_user a where a.name='关羽';

  8. 去重查询

    select distinct name from tb_user;

  9. 排序

    /排序,默认升序,ASC升序,DESC降序/
    SELECT * from tb_user order by salary asc;
    SELECT * from tb_user order by salary desc;

  10. 聚合函数

    对查询的结果进行统计计算

  11. 分组(group by)

    单独使用group by进行分组,数据只显示每一组的一个条数据

    注意:在group by 后面出现的字段和select仅挨着的保持一致

    /查询工资大于1500的部门名称以及人数/
    select department,group_concat(name),count(*) from tb_user where salary>1500 group by department;

    /查询部门总工资大于9000的部门的名称和部门的人员/

    select department as '部门名称',
    group_concat(name) as '分组的名单',
    sum(salary) as '工资总和' from tb_user group by department having sum(salary)>9000;

    where和having的区别:

    select查询书写顺序

  12. 模糊查询

    根据指定的关键字进行查询,使用like关键后跟通配符进行查询

    通配符:

    • ‘_’ 任意一个字符
    • ‘%’ 任意 0-n个字符

    select* from tb_user where salary like '%9%';

  13. 分页查询(limit)

    limit用来限定查询结果的起始行,以及总行数。

    • select * from emp limit 0, 5;

1.2 数据完整性

​

1.2.1. 实体完整性

  1. 主键约束

    PRIMARY KEY :不允许重复,非空,每个表中要有一个主键

    注意:VARCHAR()类型的主键可以为空,不能重复

    创建方式:

    • -- 主键1
      create table tb_user2(
      id int primary key,
      name varchar(15)
      )character set utf8;
    • -- 主键2
      create table tb_user2(
      id int,
      name varchar(15),
      primary key(id)
      )character set utf8;
    • -- 主键3
      create table tb_user2(
      id int,
      name varchar(15)
      )character set utf8;
      alter table tb_user2 add constraint primary key(id);
  2. 唯一约束

    UNIQUE:数据不可以重复,可以是null值

    格式:create table tb_user2(
    id int primary key,
    name varchar(15) unique
    )character set utf8;

  3. 自动增长约束

    AUTO_INCREMENT:指定列的数据自动增长

    注意:一般配合主键约束一起使用

    格式:

    create table tb_user2(
    id int primary key auto_increment,
    name varchar(15) unique
    )character set utf8;

1.2.2. 域完整性

​ 限制单元格的数据正确,不对照此列的其它单元格比较,域代表当前单元格

  1. 数据类型

  2. 非空约束

    NOT NULL

  3. 默认值约束

    DEFAULT

    格式:name varchar(15) default '男'

1.2.3. 参照完整性(引用完整性)

  1. 主外键关联

    格式:

    alter table tb_student1 add constraint stu_user_fk foreign key(sid) references tb_user2(id);

1.3.表的关系

  • 一对一关系
  • 一对多关系
  • 多对多关系

1.3.1. 连表查询

  1. 内连接

    • select * from tb_student,tb_score where tb_student.sid=tb_score.id;

      简写写法(99查询法)

    • select * from tb_student inner join tb_score on tb_student.sid=tb_score.id

      标准写法

  2. 外连接

    • 左外连接
      • select * from tb_student left join tb_score on tb_student.sid=tb_score.id
    • 右外连接
      • select * from tb_student right join tb_score on tb_student.sid=tb_score.id

posted @ 2021-08-06 17:38  知心夜雨  阅读(168)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3