SQL语言

2023-12-18 05:45:42

MySQL, Oracle, PostgreSQL

创建表

在MySQL上创建第一个表

  • 创建表,dept:部门表
  • deptno:部门号,int:整数类型,primary key: 这个字段是表的主键
  • dname:部门名, varchar:变长的字符串类型,12:字符串最大长度不超过2,not null:字符串不为空
  • loc:位置,char:定长(最大10)
create table dept(
depetno int primary key,
dname varchar(12) not null,
loc char(10)
);

在Oracle数据库上创建第二个表——员工表

  • empno:员工号
  • ename:员工名
  • deptno:工号
  • hiredate:日期型
  • numeric:数字类型 ,最大为8,精确到小数点2位
create table emp(
empno int primary key,
ename char(10) not null,
deptno int,
hiredate date,
sal numeric(8,2),
comm numeric(8,2)
);

Output:
Table created

  • 把刚才创建的表删除
drop table emp;

再次删除会报错,为了保证它不出错,删除前判断

drop table if exists emp;

在这里插入图片描述

使用Insert语句向表中添加记录

  • 在postgreSQL上进行这个实验
  • insert into接表名,values后面接所有字段的值
insert into dept values(1,'Development','New YORK');
  • insert第二种写法是在insert后面列出所有的字段名,value后面跟字段值
insert into dept(deptno,dname,loc) values(2,'Testing','CHICAGO');
  • 第三种是只列出部分字段,没有列出的在表中为空值
insert into dept(depto,dname) values(3,'Marketing')

创建学习环境的脚本

在这里插入图片描述

学习SELECT

  • 查询表中所有字段
  • 第一种
select * from emp;
  • 第二种:一一列出所有字段名(推荐)
select empno,ename,deptno,hiredate,sal,come from emp;
  • 列出部分字段
select ename, sal from emp;
  • 对字段进行计算
select ename, sal,sal*12 from emp;
  • 为字段添加别名,注意别名不能有空格,如果有可以用双引号
select ename, sal, sal*12 as annual_salary from emp;
  • 指定别名,不能出现保留字 如select,可以使用双引号
select ename "select" from emp;
  • 别名里面不能有特殊字符,如百分号,用双引号解决

DISTINCT关键词

  • 在查询字段值的时候,相同的值可能返回多次
  • 例如查询部门号
select deptno from emp;
  • 希望列出不同值
select DISTINCT deptno from emp;

WHERE进行条件过滤

  • 例如要查询2010后入职的员工信息
select ename,sal,deptno,hiredate from emp where hiredate>='2010-01-01';

不等于的两种表示:

!=
<>

在这里插入图片描述

AND,OR,NOT运算符

  • and 比 or优先级高
select * from emp where deptno=2 or (sal>10000 and hiredate>'2015-01-01')
  • not 和 != 等价
select * from emp whre depto not 2

IN 运算符

select ename, empto from emp where empno=3 or empno=4 or  empno=5;

更简单 用in

select ename, empto from emp where empno in (3,4,5);

不在

select ename, empto from emp where empno not in (3,4,5);

BETWEEN指定一个范围

select ename,hiredate from emp where hiredata>='2013-01-01' and hiredate<='2013-12-31';
select ename,hiredate from emp where hiredata between '2013-01-01' and '2013-12-31';

like用于字符串匹配

  • %匹配零个,一个,多个字符
  • _匹配单个字符
  • 匹配ename J开头的
select * rom emp where ename like 'J%';

匹配有名字种有a的

select * from emp where ename like '%a%';

匹配第三个字符是a的,使用两个下划线

select * from emp where ename like '__a%';

用ORDER BY排序

  • 用工资sal排序,从低到高
select ename,deptno,sal from emp order by sal;
  • 倒序
select ename,deptno,sal from emp order by sal desc;
  • 使用多个字段,先部门号,再工资
select ename,deptno,sal from emp order by depto,sal;
  • 多个字段升降可以不同, depo降序,sal升序
select ename,deptno,sal from emp order by depto desc,sal asc;

注释

  • 单行注释
-- xxxxxx
  • 多行注释
/* xxx
xxx
xxx */

UPDATE更新记录

select * from emp where empno=3;

在这里插入图片描述

update emp set deptno=1 where empno=3;

在这里插入图片描述

update emp set sal=sal+1000 where empno=3;
  • 同时更新多个字段
update emp set deptno=1, sal=sal+1000 where empno=3;
  • 子查询
    例如把开发部门develoment 的员工增加1000
select deptno from dept where dname='Development';
update emp set sal=sal+1000 where deptno=1;

等价于

update emp set sal=sal+1000 where deptno=(select deptno from dept where dname='Development');

DELETE删除记录

select * from emp where empno=5
delete from emp where empno=5
  • 删除所有表中语句
delect from emp;
  • 快速删除所有
truncate table emp;

NULL空值,遗漏的,

select 1+null

output

null
select null-null

output

null

再MySQL,pastgreSQL,输出为null, 在Oracle,中不会有任何值

select 1 where null=null;

output

?column?
--------
(0 rows)
select 1 where null!=null;

output

?column?
--------
(0 rows)

不能进行比较
判断是否为null

select 1 where null is null;
select 1 where 0 is not null;
select 1 where '' is not null;
  • 修改值为null
update dept set loc=null where deptno=2;
insert into dept values(4,'Operation',null);
insert into dept(deptno,dname) values(5,'Operation');

在这里插入图片描述

文章来源:https://blog.csdn.net/qq_43058281/article/details/135051033
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。