• 数据库笔记——SQL语言DQL语句


    schema等于database 数据库

    datagrip中使用控制台进行操作:

    右键new  QueryConsole

    创建表格create table中:
    1. 括号内不管是定义属性还是声明约束,都使用逗号分隔,最后一句不用逗号
    2. 括号外使用分号

    DDL:数据库定义语言;用于创建/修改数据库/表结构,相当于修改表头有哪些列

    1. create table student(
    2. id int auto_increment primary key,
    3. name varchar(10),
    4. number varchar(10)
    5. );
    6. insert into student values (null, '小明','20231014'),
    7. (null,'小新','20231600');
    8. create table course(
    9. id int auto_increment primary key ,
    10. name varchar(10)
    11. );
    12. insert into course values (null,'java'),
    13. (null,'PHP'),
    14. (null,'MySQL'),
    15. (null,'Hadoop');
    16. create table student_course(
    17. id int auto_increment primary key ,
    18. id_stu int ,
    19. id_cou int,
    20. foreign key (id_stu) references student(id),
    21. foreign key (id_cou) references course(id)
    22. );
    23. insert into student_course values (null,1,1),
    24. (null,1,2),
    25. (null,1,3),
    26. (null,2,2),
    27. (null,2,3);

    DML:数据库操纵语言;用于增删/修改表中数据,相当于修改表中一行数据

    约束:

    1. primary key(主码约束)

    主码属性必须非空且唯一

    primary key (dept_name)

    2. foregin key references(外键约束)

    foreign key (dept_name) references department(id),

    3. not null(非空)

    name varchar(20) not null

    DQL语句(数据库查询语言)

    单关系查询

    select dept_name from instructor;

    删除重复:使用distinct关键词:

    select distinct dept_name from instructor;

    使用all显式指明不去除重复:

    select all dept_name from instructor;
    1. select name
    2. from instructor
    3. where dept_name='Comp.Sci.' and salary>70000;

    多关系查询

    1. select name, instructor, dept_name, building
    2. from instructor, department
    3. where instructor.dept_name=department.dept_name;

     如果一个属性出现在两个关系中,我们使用关系名作为前缀;如果属性只出现在一个关系中,则不需要前缀

    执行顺序:from -> where -> select

    1. 使用自然连接:
    2. select name, instructor, dept_name, building
    3. from instructor natural join department;

    多表查询

    多对多:

    建立第三张中间表

    内连接

    隐式内连接
    1. select e.name,d.name from emp e,dept d where e.dept_id=d.id;
    2. select e.name,d.name from emp,dept where emp.dept_id=dept.id;
    显式内连接
    select emp.name,dept.name from emp inner join dept on emp.dept_id=dept.id;

    分组查询

    当SOL查询使用分组时,一个很重要的事情是需要保证出现在select语句中但没有被聚集的属性只能是出现在group by子句中的那些属性。换句话说,任何没有出现在group by子句中的属性如果出现在select 子句中的话,它只能出现在聚集函数内部,否则这样的查询就是错误的。例如,下述查询是错误的,因为ID没有出现在group by 子句中,但它出现在了select子句中,而且没有被聚集:

    执行顺序:from -> where -> group by -> having -> select

    例:查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址:

    1. select address, count(*) from emp where age<45 group by address
    2. having count(*)>=3;

    where在分组前执行,分组时会执行聚合函数,having在分组后执行

    查询字段一般为聚合函数和分组字段

    关键词:

    distinct

    auto_increment:自动增长

    id int auto_increment primary key,

  • 相关阅读:
    44_时间日期类
    C++ 基础:指针和引用浅谈
    决胜未来:解锁新科技趋势的无尽可能性
    如何减少爬虫产生的网络负载:爬取间隔和缓存控制策略
    STL基础知识
    利用torch.nn实现logistic回归在人工构造的数据集上进行训练和测试
    【无人机】基于拓展卡尔曼滤波时序四旋翼无人机状态跟踪附matlab代码
    基于双层共识控制的直流微电网优化调度(Matlab代码实现)
    每日一题:vue3自定义指令大全(呕心沥血所作,附可运行项目源码)
    【Redis】对象
  • 原文地址:https://blog.csdn.net/weixin_53432918/article/details/133824919