DBMS 数据库管理系统
DB 数据库(FILE)
RDEMS 关系型数据库管理系统
RDB 关系型数据库
2.关系型数据库的代表
oracle 甲骨文 50%
版本: oracle9i oracle10g oracle11g
db2 IBM 20%
sqlserver 微软 15%
开源免费:
mysql sun(oracle收购了)
3.操作数据库的语言
SQL 结构化查询语言
a. select语句 select
b. ddl语句(数据库定义语言)
create drop alter
c. dml语句(数据库操作语言)
insert delete update
d. tcl语句(食物控制语句)
commit rollback savepoint
f. DCL(数据控制语言)
grant revoke
4.要使用服务器上数据库
telnet 192.168.88.35(oracle,oracle)
sqlplus(openlab,open123) 或 sqlplus openlab/open123
SQL>
查看数据库中表的结构
SQL> desc 表名;
SQL> desc s_emp
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(7)
LAST_NAME NOT NULL VARCHAR2(25)
FIRST_NAME VARCHAR2(25)
USERID VARCHAR2(8)
START_DATE DATE
COMMENTS VARCHAR2(255)
MANAGER_ID NUMBER(7)
TITLE VARCHAR2(25)
DEPT_ID NUMBER(7)
SALARY NUMBER(11,2)
COMMISSION_PCT NUMBER(4,2)
表头中每个字段的信息
NULL? 这个字段上的记录 能不能没有值
数据类型 number 数字类型
varchar2 字符串类型
date 日期类型
5.select语句
选择:当所有列被选中 部分行被选择
投影:当所有的行被选中 部分行被选择
表连接:当查询的数据来于多张表,就需要把多张连接成一张表
select 语句
A.from 子句
1.从表中查询一个字段
select 字段名 from 表名;必须有分号
select salary from s_emp;
2.从表中查询多个字段
select 字段名1,字段名2 from 表名;
3.把s_emp表中的所有数据查询出来;
*可以替代所有的字段名;
select id,first_name,last_name,salary,from s_emp; //逻辑清晰,语法比较复杂;
select * from s_emp;//语法简洁,但是逻辑不清晰。
4.表中字段的数学运算+ - * 、/
把每个人的工资+100,之后显示;
select id ,salary,salary+100 from s_emp;
5.字段或者表达式的别名
select id ,salary sal,salary*12 ysal from s_emp;
一个字段或者一个表达式的别名只能有一个并且处理为大写;
双引号,可以处理成想要的任何形式“Sal”.
6.C语言中 双引号表达字符串
sql如何表达字符串?
单引号'hello'
如何拼接字符串? || select first_name || '_' || last_name name from s_emp;
作业在姓名之间拼接个单引号; '''',表示的是单引号;
select first_name || '''' || last_name name from s_emp;
7.NULL 值的处理
a.计算每个员工的年薪 需要考虑提成
1000*12+1000*12*25/100
select salary*12,salary*12+salary*12*(commission_pct/100) from s_emp;
NULL 值和任何值做运算结果都是NULL
b.NULL 值处理函数
nvl(par1,par2)
当par1的值为NULL就返回par2的值
当par1的值不为NULL就返回par1的值
select salary*12,nvl(salary*12+salary*12*(commission_pct/100),0) from s_emp;
NULL 要尽早处理
select salary*12,salary*12+salary*12*(nvl(commission_pct,10)/100) from s_emp;
8.数据的排重显示 distinct
select salary from s_emp;
select distinct salary from s_emp;
多字段排重
select distinct 字段1,字段2 from 表名;
select distinct id,salary from s_emp;
B.where 子句(条件子句)
1.条件子句
符合where条件的数据就会被选中,不符合where条件的数据就会被过滤掉
2.数字类型的条件
查询工资小于1000的员工 列出id,first_name,salary
--select id,first_name,salary from s_emp where 1=1;
--select id,first_name,salary from s_emp where 1=2;
select id,first_name,salary from s_emp where salary<1000;
3.找出first_name 叫 Mark的 列出id,first_name,salary
select id,first_name,salary from s_emp where first_name='Mark';
对字符串的值进行操作时一定要加单引号
SQL语句不区分大小写,但字符串的值要区分大小写
4.where 条件后可以使用的运算符
where 字段 运算符 值
> < >= <= !=
5.sql提供的运算符
a.表达一个闭区间 [a,b]
where 字段 between a and b
求工资在 12000 到 12010员工的id,first_name,salary
select id,first_name,salary from s_emp where salary between 1000 and 1200;
求id在 10 到 15 员工的id,first_name,salary
select id,first_name,salary from s_emp where id between 10 and 15;
b.表达一个字段的取值在一个列表中 where 字段 in(列表)
列表就是用逗号隔开的一组值
找出部门编号 是 31,32,50 的员工的id,dept_id,first_name
select id,dept_id,first_name from s_emp where dept_id in(31,32,50);
出现概率高的放前面(提高效率)
c.模糊查询
找出所有姓李的人? where 字段 like '李%';
找出所有带龙的词? where 字段 like '%龙_';
where 字段 like '统配串';
% 可以代表0-n个任意字符
_ 代表一个任意字符
查询 first_name 带 a 的
select first_name from s_emp where first_name like '%a%';
查询 first_name 第二个字符是a的
select first_name from s_emp where first_name like '_a%';
desc user_tables;
select table_name from user_tables;
select table_name from user_tables where table_name like 'S\_%' escape '\';'
d.如何判断NULL值
where 字段 is NULL;
找出manager_id 是 NULL 的员工的id
select id,first_name,salary from s_emp where manager_id is null;
6.sql提供的逻辑运算符
and
or
not
a.求工资在[1000,1200]人的id,first_name,salary
select id,first_name,salary from s_emp where salary>=1000 and salary<=1200;
b.找部门编号在 31 或者 32 或者 50 的人的id,first_name,dept_id
select id,first_name,dept_id from s_emp where dept_id='31' or dept_id='32' or dept_id='50';
c.找出提成不是NULL的员工的id,first_name,commission_pct
select id,first_name,commission_pct from s_emp where commission_pct is not null;
d.条件的优先级
select id,first_name,salary from s_emp where salary>1000 and (dept_id=41 or dept_id=42);
C.order by 子句(排序)
1.order by 一定出现在语句最后
2.select id,salary from s_emp order by 排序标准 排序方式
排序方式
升序 默认的顺序 asc 自然顺序 字典顺序
降序 desc
select id,salary from s_emp order by salary asc;
3.按照manager_id 排序显示 id,manager_id,first_name
select id,manager_id,first_name from s_emp order by manager_id;--未指明就默认顺序排列
NULL 在排序中作为最大值来处理
4.多字段排序
先按照工资排序 显示 id,salary,first_name 如果工资相同 则按照first_name降序排列
select id,salary,first_name from s_emp order by salary,first_name desc;
D.单行函数
1.单行函数 和 组函数 的概念
单行函数:针对sql影响的每一行数据都做处理,并且每一行都返回一个结果
select upper(first_name) from s_emp where id=1;
select upper(first_name) from s_emp where id<1;
select upper(first_name) from s_emp where id>1;
组函数: 针对一组数据做处理,最终返回一个结果
count(first_name)
select count(first_name) from s_emp where id=1;
select count(first_name) from s_emp where id<1;
select count(first_name) from s_emp where id>1;
Day37_数据库、select
最新推荐文章于 2022-03-05 09:06:03 发布
