一.创建表
(一)常用数据类型:
int 整数类型
char(n)字符/串类型,固定长度n
varchar(n)字符/串,可变长度,最大长度n
numeric(a,b)精确数值,总位数a,小数点后位数b
date储存年月日的值
(二)建表举例
1.创建部门表,部门编号deptno,部门名称dname,部门所在位置location;
create table dept(
deptno int primary key,
dname varchar(9),
loc varchar(10)
);
2.员工表,员工号empno,姓名name,部门deptno,经理manager,入职时间hiredate,薪水salary(总长度7位,小数点后精确到两位);
create table employees(
empno int primary key,
name char(10) not null,
deptno int,
manager int,
hiredate date,
salary numeric(7,2)
);
3.经理表,员工号empno,头衔title;
create table managers(
empno int primary key,
title varchar(16)
);
二.insert插入
(一)基本语句
1.第一种写法,为所有字段添加值时无需字段名称,但要确保值得顺序与表中字段的顺序相同,语法如下:
insert into 表名 values(字段1的值,字段2的值,....)
第二种写法,为指定的字段插入数据时,要把字段名和字段值都列出,并一一对应,语法如下:
insert into 表名(字段1,字段2,字段3...) values (字段1的值,字段2的值....)
(二)举例
1.向员工表插入记录,包括所有字段的值
insert into employees values(1,'李四',1,1,'2022-02-29',5000.00);
2.向员工表插入记录只包括部分字段的值
insert into employees(empno,name,salary) values(2,'李四',4555.00);
三.主键的作用
主键的全称是主键约束,表的主键由表中的一个字段或多字段组成,主键唯一代表表中一条记录,关系数据库中通常每个表都有一个主键,没有主键的表通常是不严谨的设计的产物,主键有以下特点:
(1)每个表只能定一个主键
(2)主键值必须唯一标识表中的每一记录,且不能为null,即表中不可能存在有相同主键值得两条记录
(3)一个字段名只能在联合主键字段中出现一次
(4)联合主键不能包含不必要的多余字段,当把联合主键的某一字段删除后,剩下的字段不能唯一代表一条记录.
四.select查询
(一)基本语句
第一种写法,查询表中所有的字段
select *from 表名;
查询表中指定的字段
select 字段1,字段2 from 表名;
(二)实例
查询员工表所有记录的所有字段:
select * from employees;
查询员工表的所有记录的姓名和工资字段:
select name,salary from employees;
四.distinct去掉重复值
(一)用法
distinct同一字段中可能会出现重复值,使用关键词distinct可以去掉重复值,用法如下:
select distinct 字段名 from 表名;
五.where条件过滤
(一)where的用法
如果需要从表中选取指定的数据,可将where子句添加到select语句,语句如下:
select 字段名 from 表名 where 字段 运算符 值;
(三)运算符
= 等于
<>或者!= 不等于
> 大于
< 小于
between 在某个范围内
like 搜索匹配的字符串模式
(四)实例
查找入职时间早于2021.01.01的员工姓名与工资
select name,salary from employees where hiredate<'2021-01-01';
六.and和or运算符
(一)用法
and和or可以在where子句中把两个或多个条件结合起来.and 运算符要求两个条件都成立;or运算符要求两个条件中只要有一个成立即可.语法如下:
select 字段名 from 表名 where 字段n 运算符 值n and/or 字段m 运算符 值m;
七.like搜索匹配的字符串
(一)用法
在where字句中使用like运算符来搜索匹配字符串中的指定模式,百分号(%)匹配零个,一个或者多个字符.语法如下:
select 字段名 from 表名 where 字段 like 字符串;
八.in匹配多个值
(一)用法
in运算符是在where子句中指定多个搜索条件可以匹配的值.in的运算符实际是多个or条件的合并.语法如下:
select 字段名 from 表名 where 字段名 in(值1,值2,...);
(二)用法
查询员工号为3,5的员工
select name from employees where empno in (3,5);
select name from employees where empno=3 or empno=5;
查询员工表中查询部门位于一楼的员工姓名
select name from employees where deptno in (select deptno from dept where loc like '一楼%');
九.between指定范围
(一)用法
between运算符用于选取介于两个值之间的数据范围内的值,这些值可以是数字,字符串或者日期.between运算符包括开始和结束值,相当于>=and<=.语法如下:
select 字段名 from 表名 where 字段名 between 值1 and 值2;
(二)实例
入职时间不在某段时间内的员工
select name from employees where hiredate not between '2011-2-2' and '2011-4-4';
十.order by排序
order by 用于对结果集进行排序,默认按升序asc进行排序,也可以指定desc按降序对结果集进行排序.语法如下:
select 字段名 from 表名 order by字段1,字段2 asc/desc;
十一.update更新表中的数据
(一)用法
update语句用于更新表中的记录.语法如下:
update 表名 set 字段1=值1,字段2=值2,where子句;
注意:where子句指定那些记录需要更新.如果省略where子句,表中所有的记录都将更新.
(二)示例
更新某一员工的员工号为3
update employees set deptno=3,manager=4 where empno=1
十二.delete删除记录
(一)用法
delete用于删除表中的记录,语法如下:
delete from 表名 where 子句;
注意:where子句指定哪些记录需要删除.如果省略where子句,表中的所有记录都将删除!
(二)示例
删除员工号为9 的员工
select from employees where empno=9;
十三.index索引
(一)用法
创建索引可以提高访问数据的速度,创建索引的语法如下:
create index 索引名 on 表名(字段1,字段2...)
使用索引时SQL的语法和不使用索引没有任何不同,SQL语句会自动使用索引提高访问数据的速度.
(二)示例
创建name的索引
create index in_name onemployees(name);
十四.view视图
(一)用法
视图是基于SQL语句的结果集的可视化表,仕途中的字段就是来自一个或多个数据库中的真实的表中的字段.
视图总是显示当前数据,每当用户查询视图时,数据库引擎通过使用SQL语句来重建数据.
创建视图的语法:
create view 视图名 as select语句;
(二)实例
建立一个关于2018年的员工视图
create view employees_2018 as select name,salary from employees where hiredate<'2018-01-01';
查询该视图
select * from employees_2018;
如果更改数据,视图的中的数据也会随之更改;
十五.null值
(一)用法
null值代表遗漏的未知的数据,它的作用是未知的或不适用的值的占位符.
如果表中的某个列是可选的,那么我们可以在不向该列添加值得情况下插入新纪录或更新已有的记录.这意味着该字段将以NULL值保存.
字段值是否是null的判断不能用=或者<>进行,要用is null或者is not null进行.
(二)示例
select * from employees where deptno is null;
十六.字段和表的别名
(一)用法
在SQL语句中可以为表名或字段名指定临时使用的别名(Alias),别名只在当前的SQL语句中生效,它通常比字段名更具有可读性.
别名有以下应用场景:
字段名长或者可读性差时;涉及多个表且多个表中具有相同的字段名时;代表查询函数的结果;
别名的用法:
select 字段名 as 别名 from 表名as 别名;
as可以省略;
(二)示例
select name 姓名,salary 工资 from employees e;
十七.join链接
(一)用法
基于多个表之间的共同字段把他们结合起来进行查询的一种方法.链接分为以下几种:
内连接(inner join) :列出两个表中都存在的记录
左连接(left join):即使没有匹配也列出左表中的所有记录
右连接(right join):j即使是没有匹配也列出右表中的所有记录
语法:
select 字段名 as from 表1 join 表2 where 子句;
(二)示例
select name,title from employees inner join managers on eemployees.empno=managers.empno;