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,