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

schema等于database 数据库

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

右键new  QueryConsole

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

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

create table student(
    id int auto_increment primary key,
    name varchar(10),
    number varchar(10)
);
insert into student values (null, '小明','20231014'),
                           (null,'小新','20231600');

create table course(
    id int auto_increment primary key ,
    name varchar(10)
);
insert into course values (null,'java'),
                          (null,'PHP'),
                          (null,'MySQL'),
                          (null,'Hadoop');

create table student_course(
    id int auto_increment primary key ,
    id_stu int ,
    id_cou int,
    foreign key (id_stu) references student(id),
    foreign key (id_cou) references course(id)
);
insert into student_course  values (null,1,1),
                                   (null,1,2),
                                   (null,1,3),
                                   (null,2,2),
                                   (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;
select name
from instructor
where dept_name='Comp.Sci.' and salary>70000;

多关系查询

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

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

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

使用自然连接:

select name, instructor, dept_name, building
from instructor natural join department;

多表查询

多对多:

建立第三张中间表

内连接

隐式内连接
select e.name,d.name from emp e,dept d where e.dept_id=d.id;
或
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的工作地址:

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

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

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

关键词:

distinct

auto_increment:自动增长

id int auto_increment primary key,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值