| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> mysql学习总结,与oracle的差别 -> 正文阅读 |
|
[大数据]mysql学习总结,与oracle的差别 |
关系型数据库有:mysql,oracle, db2, sql server, sqlite(嵌入式,手机端)等 非关系型数据有:redis, hbase, mongodbdeng等 mysql在linux里登入方式为????????mysql -uroot -p123456 查看mysql的版本? ? ? ? mysql -V sql分类:????????数据定义语言:DDL? ? ? ? 关键字有DROP, CREATE, ALTER ? ? ? ? 数据操纵语言:DML? ? ? ? 关键字有insert, update, delete ? ? ? ? 数据查询语言:DQL? ? ? ? 关键字有select, from, where等 常用数据类型:
汉字在不用编码格式和系统下,一般占用2到3字节 创建数据库注意:mysql的数据库名,表名区分大小写,列名与关键字则不区分,与ORACLE有点不同 create database 数据库名;#存在会报错 create database if not exists bigdata_db;? ? ? ? #如果数据库存在则不创建 create database 数据库名 character set 字符集;? ? ? ? #创建数据库时设置字符集 查看mysql所有数据库show databases; 删除数据库DROP database bigdata_db; 使用/切换数据库use digdata_db; 查看正在使用的数据库select database(); 创建表create table if not exists stu2( cid varchar(20) primary key,????????#分类id为主键 cname varchar(50) #分类名称 );? #建表时添加主键 create table stu1 as select age ,count(1) cn from stu group by age;? ? ? ? #直接把结果输出为一张表 查看表结构desc 表名; 删除表drop table 表名; 修改表结构alter table 表名 add '列名' varchar(20);? ? ? ? #添加字段 alter table 表名 change 原列名?新列名 varchar(30);? ? ? ? #修改字段及类型 alter table 表名 drop?列名;? ? ? ? #删除列名 rename table 表名 to 新表名;? ? ? ? #修改表名 insert into用法insert into stu(id,name)values(1,'张三');? ? ? ? #values可以不加s,单引号/双引号都行 insert into stu values(1,'李四',2);? ? ? ? #需把所有字段的value值都写上,并且顺序需要一一对应 insert into stu values(1,'李四',2),(1,'王五',2);? ? ? ? #一次插入多条数据 insert into stu1 select age, count(1) cn?from stu where sex='男' group by age;? ? ? ? #插入查询的结果集 update用法update 表名 set?sal=200,name='youyou'? where id=1;? ? ? ? #建议加上where条件 delete from stu where id=1;? ? ? ? #建议加上where条件 truncate 表名;? ? ? ? #截断表,先删除表再重建,慎用 添加及删除主键约束create table sut(id int primary key,name varchar(20));? ? ? ? ?or create table sut(id int, name varchar(20),sal int,constraint pk_stu primary key(id,name));? ? ? ? or alter table sut add primary key(id); alter table stu drop primary key; 添加自动增长的列create table stu(id int primary key atuo_increment,? ? ? ? #主键及自动增长 name varchar(20)); 当要插入数据时,可以不为id设置值,或为null都行 INSERT INTO stu4(NAME) VALUES ('zhangsan'); INSERT INTO stu4(id,NAME) VALUES (null,'zhangsan'); 修改自动增长值,默认值为1 ALTER TABLE stu AUTO_INCREMENT=100; 非空约束create table sut(id int not null,name varchar(20));? ? ? ? ?or ALTER?table?sut?modify?name?varchar(100)?not?null; 注意:mysql的‘’空值!=null,而oracle的‘’空值就是null,这是2者的差别 唯一约束create table stu(id int unique,name varchar(20));? ? ? ? or alter table stu6 modify name varchar(20) unique ; 外键约束alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键); alter table 从表 drop foreign key 外键名称 注意:添加外键约束后,插入数据应先插入主表,删除数据要先删除从表,否则会报错 条件查询
聚合函数
limit用法select * from stu limit 5;? ? ? ? #显示查询的5条数据 select * from stu limit 0,5? ? ? ? #第1条数据开始,每页显示5条 注:oracle里没有这个函数,可以用伪例rownum代替 关联方式inner join? ? ? ? ?内连接 left join? ? ? ? 左连接 right join? ? ? ? 右连接 full join? ? ? ? 全关联 问题:where和on的区别 where是过滤条件,on是关联条件,使用on查询速度更快 子查询子查询可以作为(查询条件,查询结果,表等) select * from stu where id=(select pid from where stu1);? ? ? ? #查询条件 select * from stu t2 inner join (select * from stu1 where id in(1,2,3))t1 on t2.id=t1.id;? ? ? ? #表 select * from stu where id in (select? id from stu1 where sex=‘男’ and age=‘18’);? ? ? ? #查询结果 索引create table t_dept( ? ? no int not null primary key, ? ? name varchar(20) null, ? ? sex varchar(2) null, ? ? info varchar(20) null, ? ? index index_no(no) ? );????????#创建普通索引 create table t_dept( create index index_name on stu(name);????????#创建普通索引 create unique index index_name on stu(name);? ? ? ? #创建唯一索引 alter table stu4 add?index index_id(id);? ? ? ? #添加普通索引 alter table stu4 add unique index index_id(id);? ? ? ? #添加唯一索引 show index from stu;? ? ? ? #查看表中所有索引 drop index index_name on table_name;? ? ? ? #删除索引 alter table table_name drop index index_name;? ? ? ? #删除索引 开窗函数/分析函数row()number over (partition by 列名 order by 列名);? ? ? ? #1,2,3,4,5 rank() over (partition by 列名 order by 列名);? ? ? ? #1,2,2,4,5 dense_rank() over (partition by 列名 order by 列名);? ? ? ? #1,2,2,3,4 注:partition by 和order by 后面可以接多个字段 问:having 和where的差别 where是分组之前对数据过滤,having一般是对分组之后的数据进行第二次过滤; 接下来讲下oracle,在mysql里大部分都有效数字函数ABS(x) ? ? ? ?x绝对值 ?ABS(-3)=3 TRUNC ?截断---第二个参数是正数的时候,就在小数点后做截断 ?||拼接函数CONCAT(x,y)?? ?连接字符串x和y。 WM_CONCAT(参数字段)函数?select WM_CONCAT(id,name) from emp;?? 将每一组里边每一行字段的数据都写在一起 DISTINCT 去重select distinct id from emp;·? ? ? ? #去除重复数据 LENGTH函数?SELECT LENGTH('列名') FROM DUAL;? ? ? ? #查看长度 SELECT LENGTHB('长度') FROM DUAL;? ? ? ? #两个中文占 4个字节 instr函数SELECT INSTR('DGSJIA','S',1,1) FROM DUAL; --3? ? ? ? 查看出现在第几位,可以和where 字段 >1一起使用,查看是否在某个字段中出现 REPLACE ?替换函数SELECT REPLACE(字符串,旧的值,新的值) FROM DUAL; 大小写转换函数LOWER(x)?? ?x转换为小写。 SELECT LOWER(ENAME) FROM EMP; ????????--将员工的名字转化为小写 截取函数LTRIM(x[,trim_str])?? ?把x的左边截去trim_str字符串,缺省截去空格。 LTRIM(参数1,参数2) 把参数1 的左边截去 参数2 字符串,参数2 不写的时候默认截去空格。 SELECT LTRIM('ABCDEFG','ABC') FROM DUAL; ?---截去 ABCDEFG 的左边的 ABC SUBSTR函数SUBSTR(x,start,length) ?返回x的字串,从staart处开始,截取length个字符, 缺省length,默认到结尾。 SELECT SUBSTR('DDSIADF',1,4)---从第一个位置开始截取,截取四个长度 时间函数TO_DATESELECT TO_DATE('20210722','YYYYMMDD') FROM DUAL; SELECT TO_DATE('2021-07-22','YYYY/MM/DD') FROM DUAL; SELECT TO_DATE('20210722152401','YYYYMMDD HH24MISS') FROM DUAL; TO_CHARSELECT TO_CHAR(SYSDATE,'YYYYMMDD') FROM DUAL;--字符类型 '20210906' TRUNC 对时间的截取SELECT TRUNC(SYSDATE,'YYYY')FROM DUAL; ---截取到时间所在年的一月一号 LAST_DAYSELECT LAST_DAY(SYSDATE) FROM DUAL;????????---查找这个时间所在月份的最后一天 SELECT LAST_DAY(SYSDATE)+1 FROM DUAL;--当前系统时间下一个月的第一天 SELECT LAST_DAY(LAST_DAY(SYSDATE)+1) FROM DUAL; ?--当前系统时间下一个月的最后一天 ADD_MONTHS 月份加减SELECT ADD_MONTHS(SYSDATE,1)FROM DUAL; --当前系统时间加1个月 SELECT ADD_MONTHS(SYSDATE,-12)FROM DUAL; --当前系统时间减12个月 SELECT ADD_MONTHS(LAST_DAY(SYSDATE),1) FROM DUAL;--下月的最后一天 MONTHS_BETWEEN?月份差值MONTHS_BETWEEN(参数1,参数2)? ? ? ? ?参数1减去参数2 的月份 SELECT MONTHS_BETWEEN(SYSDATE,TO_DATE(20210501,'YYYYMMDD')) FROM DUAL DECODE函数DECODE(字段, SELECT T.DEPTNO case?whenCASE WHEN 条件1 THEN 返回值1 WITH AS 优化器如果WITH AS短语所定义的表名被调用两次以上, 查询出来的结果集会被放入到临时表中,注意临时表的空间, WITH 自定义结果集名称 AS( 集合运算INTERSECT(交集),返回两个查询共有的记录。 ROWID? 用法ROWID 是一个物理地址,每一条数据所对应的 ROWID 都是唯一的 ---删除重复数据 SELECT *? ROWNUM? ?伪例在查询的结果集中,ROWNUM为结果集中每一行标识一个行号, 只能用小于或者小于等于,
创建序列CREATE SEQUENCE sequence_name 删除序列DROP SEQUENCE 序列名称 其他的Oracle内容后面再分享吧,其实2个数据库大部分都是相同的,有什么错误的地方也麻烦指出,让我能够改正,也能为后面的阅读者提供正确的内容,ths |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 13:36:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |