SQL语言
2023-12-18 05:45:42
MySQL, Oracle, PostgreSQL
SQL语言
创建表
在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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!