MySQL基础(笔记)

媛媛要加油呀 2019-03-01 01:25:33
关系型数据库:
Oracle:是由Oracle(甲骨文)公司的一款关系型数据库。其中该公司有很多
服务器以及软件,但最主要的还是Oracle数据库。
MySql:是一款小众化的数据库,之前是由Sun公司收购,现在又属于Oracle公司
Sql Service:是微软的一款关系型数据库
DB2:是IBM公司的一款关系型数据库,它是与Oralce数据库竞争的强力对手,安全性,以及
使用率都和Oracle数据库进行媲美。
Access:是微软的一款关系型数据库。
Sybase:是美国的一个公司的关系型数据库。

NOSQL:不仅仅是sql。比如:HBase
键值对:{“name”:“zhangsan”,"age":28,"sex":"nan"}

打开数据库的方式:
1.在cmd窗口输入一个命令(sqlplus)
2.在安装的Sql命令行中打开
3.在可视化工具中打开。


SQL语句:(数据结构化语言)

DDL语句:(database defined Language:数据库定义语言),主要用来创建和
修改数据库中的对象。
create:创建
alter:修改
drop:删除

如何创建表:
create table table_name(
字段名(name) 数据类型(data_type) [完整性约束],
字段名(other_name) 数据类型(data_type) [完整性约束]
);

数据类型:
NUMBER:表示数字类型,格式number(6) number(5,2)
number(6) number(5,2)
当数字只有一个时,表示数字类型小数点前的长度为那么多
当两个数字时,前面一个数字表示总位数,后面一个数字表示小数点后的位数。

CHAR:表示字符类型
char(n):n表示字符的字节数,char类型最大能够存放2000个字节

VARCHAR:表示长字符类型
varchar(n):n表示字符的字节数,varchar类型最大能够存放4000个字节

DATE:表示日期类型,长度只有7个字节
默认格式为:DD-MON-YY


修改表名:rename oldname to newname; commit;
修改表添加字段:alter table myemp add(hiredate DATE);
修改表删除字段:alter table myemp drop(hiredate);
修改表修改字段:alter table myemp modify(gender char(5));
删除表:drop table myemp;

DML语句:(database maptipu.. Language:数据库操作语言),它是用来对数据库中的
对象进行操作的语言。
delete:删除
update:更新
insert:插入

插入数据:insert into myemp(id,gender,name,birth,salary,job,dept)
values(6,'W','Flacs',TO_DATE('1997-05-03','YYYY-MM-DD'),4000,'UI开发工程师',123458);
更新数据:update myemp set GENDER='G' where GENDER='M';
删除数据:delete from MYEMP where job='CEO';

DCL语言:(database control language:数据库控制语言),它是对数据库权限控制的操作。
grant:授权
connect:连接

char和varchar数据类型的函数:
1.concat(c1,c2):返回两个字符串连接后的结果。两个参数c1,c2是要连接的两个字符串。
它的作用和"||"一样;如果和null拼接,相当于连接了一个空格。
select id,CONCAT(name,salary) from MYEMP;
select id,concat(concat(name,':'),salary) as show from MYEMP;
select id,(name || ':' || salary) as show from MYEMP;

2.length(char):用于返回字符串的长度
select length(name),name from myemp;
select name from myemp where length(name)=4;

3.upper、lower、initcap
upper:将字符串转换为大写形式
lower:将字符创转换为小写形式
initcap:将字符串中的每个单词的首字母大写
select name,upper(name) from myemp;
select name,lower(name) from myemp;
select name,initcap(name) from myemp;

4.trim(c1 from c2)、ltrim(c1[,c2])、rtrim(c1[,c2])
trim(c1 from c2):返回c1从c2中左右截取的结果
ltrim(c1[,c2]):返回c2从c1中左截取的结果
rtrim(c1[,c2]):返回c2从c1中右截取的结果
select name,trim('S' from name) from MYEMP;
select name,LTRIM(NAME,'J') from MYEMP;
select name,RTRIM(name,'K') from myEmp;

5.substr(char,m[,n])
substr:表示截取字符串;返回从m开始,截取n个字符的字符串。
select name,SUBSTR(name,3,3) from MYEMP;
select name,SUBSTR(name,3) from MYEMP;

6.instr(c1,c2[n,m])
instr(c1,c2[,n,m]):返回子字符串c2在源字符串c1 中的位置;
n:表示从c1的n个下标开始
m:表示c1中的第几个开始。(如果找不到返回为0)
select INSTR('HelloWorldWorldWorldabc!','World',10,2) from dual;

数值函数:
1.round(m,n):表示四舍五入;m表示需要四舍五入的那个数,
n表示小数点后几位。
select round(45.621) from dual;
select round(45.621,-1) from dual;

2.trunc:表示截取数字
和round差不多,但是不四舍五入。
select trunc(45.621,0) from dual;

3.mod:表示去余
mod(m,n)
select mod(13,5) from dual;

4.ceil(m),floor(m)
ceil(m):表示向上取整
floor(m):向下取整
select ceil(14.9) from dual;
select floor(13.1) from dual;


对日期操作的一些函数
to_Date:将日期型字符串按照特定的日期格式解析为日期类型。
TO_CHAR:将一个Date日期按照指定的字符串日期格式
select TO_CHAR(sysdate,'YYYY-MM-DD HH24-mi-ss') from dual;
Last_Day(Date):表示当前日期月份的最后一天
select Last_Day(sysdate) from dual;
ADD_months(Date,n):表示当前日期增加n个月
select Add_Months(sysdate,1) from dual;
Months_bettwen(Date1,Date2):表示两个日期之间间隔的月数
select MONTHS_BETWEEN(sysdate,sysdate+1000) from dual;

日期类型可以进行加减运算;
select (sysdate-birth) as age from myemp;
100天以后是哪一天?
select (sysdate+100) as ten from dual;




DQL语句:(databse Query Language:数据库查询语言),它是用来查询数据库中的对象的。

select:查询

查询语句:select id,name,job from myemp;


别名:当select查询表达式或者函数的时候,查询的结果的属性会是一个表达式或者一个函数,
因此看上很不直观也不方便,所有给它一个别名,为了方便直观的了解数据。
select trunc(45.621,0) as num from dual;

or、and用来连接多个条件
or的优先级小于and,因此在两者共同使用的时候,可以加上()来提高优先级。
select name from myemp where
salary>4000 and (job='UI设计师' or job='Java开发工程师');

like:用于模糊查询
通配符:_:表示一个
%:表示0-多个
select * from myemp where name like '_A%';
select * from MYEMP where name like '%m%' and salary>=3000;

in、not in
in(list):满足list集合中的任意一个
not in(list):不满足list集合中的任意一个。
select * from MYEMP where job in('UI设计师','Java开发工程师');
select * from MYEMP where gender='G' and job in ('Java开发工程师','打扫卫生');

between...and...
判断在一个区间范围内
select * from MYEMP where salary BETWEEN 3000 AND 5000;
select * from MYEMP where
salary BETWEEN 3000 AND 4000
and (dept='123457' or dept='123458')
and name like '%A%';

any、all
他们一般和>、>=、<、<=进行结合使用
any(list)、all(list):
>=any:大于list最小
<=any:小于list最大
>=all:大于list最大
<=all:小于list最小
注:一般集合中的范围不会写死,都是通过子查询得到的。
select * from MYEMP where salary<=any(4000,2000,3000);

distinct:消除重复结果集
select DISTINCT job from MYEMP;
select DISTINCT job,DEPT from MYEMP;
注:多个字段消除重复结果集的时候,是消除这些字段值的组合

order by:将结果集按照某个字段的某种排序方式显示
desc:表示降序
asc:表示升序
select * from MYEMP order by SALARY asc;
select * from MYEMP order by SALARY asc,DEPT asc;
注:1.多字段排序时,order by 子句有优先级之分,谁在前先执行谁,
排序的结果又重复的再按照后面一个进行排序。
2.order by 子句必须放在SQL语句的最后。
3.排序时,当值为null的时候,默认为最大值

聚合函数:又称分组函数,或者多行函数
作用:是用来处理结果集指定字段的值进行统计工作。
max()最大值、min()最小值、sum()求和、count()统计次数、avg()平均值
select max(salary) as max,min(salary)
as min,sum(salary) as sum,
trunc(avg(salary),2) as avg from MYEMP;

select count(8) from MYEMP;

group by:表示分组,它是将结果集按照某个字段进行分组,然后配合聚合函数
进行统计工作。
select avg(salary),dept from MYEMP GROUP BY dept;
select Max(salary),min(salary),job from MYEMP GROUP BY job;

注:1.当select子句查询的时候,使用聚合函数时,有某个字段没有使用聚合函数
时,那个字段必须出现在group by子句中,进行分组。
2.当多个字段进行分组时,是将多个字段进行组合分组。
having子句:是相当于where一样进行条件筛选,但是执行时机和where不同,having执行是在
分组之后,where子句是在分组之前。
select avg(salary) from MYEMP group by dept having avg(salary)>2000;


关联查询
关联查询的结果集中字段来自多张表,这就需要多张表进行联合查询。
select name,dname from MYEMP,MYDEPT
where MYEMP.DEPT=MYDEPT.DEPTNO;
采用别名对表进行关联查询,作用简化SQL语句。
select e.name,d.dname from MYEMP e,MYDEPT d
where e.DEPT=d.DEPTNO;
在进行多表关联查询的时候过滤要求必须同时成立。
select e.* from MYDEPT d,MYEMP e
where d.DEPTNO=e.DEPT and d.DLOC='BeiJing';

select e.* from MYDEPT d,MYEMP e; 查询结果是一个笛卡尔积,笛卡尔积结果
毫无意义,所以需要避免产生笛卡尔积。在关联查询中增加关联条件,N张表至少需要
N-1个关联条件。

内连接:也是一种关联查询的方式。
采用的是JOIN...ON的形式进行关联查询。
select e.name,d.dname from MYEMP
e JOIN MYDEPT d ON e.DEPT=d.DEPTNO;
不满足关联条件的记录是不会被查询出来。

外连接:是在关联查询中除了可以满足连接条件的记录之外,还可以
将不满足连接条件的记录也列出来。
外连接:左外连接、右外连接、全外连接

左外连接:LEFT OUTER JOIN ON
是以JOIN左侧的那个表作为基表,满足或者不满足连接条件的左表都会被查询出来。
右外连接:RIGHT OUTER JOIN ON
是以JOIN右侧的那个表作为基表,满足或者不满足连接条件的左表都会被查询出来。
全外连接:FULL OUTER JOIN ON
是以JOIN左右两侧的表作为基表,满足或者不满足连接条件的左表都会被查询出来。

自连接:是指当前表的一条数据可以对应当前表自己的多条数据。
作用:为了解决数据类型相同,但是本身存在上下级关系的树状结构数据。
select e.name leadername,m.name myname from myemp e
RIGHT OUTER JOIN myemp m on e.selfid=m.LEADERID;

select e.name leaderName,m.name myName from MYEMP e,MYEMP m
where e.SELFID=m.LEADERID;

子查询:
子查询是一条查询语句,它是嵌套在其他SQL语句中的,目的是将查询的结果
提供给外层SQL语句。
select * from myemp where
salary>(select salary from myemp where name='Demo');

select * from myemp where
salary>(select salary from myemp where name='Demo');
select * from myemp where dept=
(select dept from myemp where name='Rose');
select * from myemp where salary >(select avg(salary) from myemp);

在DDL语句中使用子查询,
可以将一个子查询的结果集作为表快速创建出来。
create table JAVADEPT
as
select * from MYEMP where dept=10;

在DML语句中使用子查询
update myemp set salary=salary*0.9 where
dept=(select dept from myemp where name='MICK');

子查询的结果:
单行单列、多行单列、多行多列、单行多列
其中单列的子查询通常是作为过滤条件,多行多列通常作为DDL语句
的表使用。多行单列一般配合in、not in、any、all使用
...全文
74 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

202

社区成员

发帖
与我相关
我的任务
社区描述
非技术问题的乐园
数据库数据库架构数据库开发 技术论坛(原bbs)
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧