前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql的学习笔记(阶段一)

mysql的学习笔记(阶段一)

作者头像
兰舟千帆
发布2022-07-16 13:00:44
6140
发布2022-07-16 13:00:44
举报
文章被收录于专栏:兰舟千帆的java学习笔记
代码语言:javascript
复制
use mysql;
create table if not exists stu2
(
	sid int(11),
	name varchar(10),
	gender varchar(10),
	brith date
	
);
show table stu1;
show columns from  stu1;
-- alter table stu2 add address varchar(10); 
alter table stu2 add (address varchar(10),score int(10));
insert into stu2 values(1,"李自成","男","1000-12-12","北京",44),(2,"华佗","男","1201-12-13","三国",100);
select distinct * from stu2; #无重复记录查找
select * from stu1 as p1; -- as 可以省略
select *from stu2 as p2; -- 起别名
select name , score+10 score  from stu2;
select  distinct * from stu2 where name = "李自成";  -- 条件查询
select * from stu2 where not (name ="李自成");

-- 一个查询条件嵌套
-- if语句里面如果满足就返回yes,不满足的话就返回no
select a,b,c,
if(a*a=b*b+c*c or a*a+b*b=c*c or a*a+c*c = b*b,'Yes','No') as right_triangle
from line_segments;

select * from stu2 where score >=100;
#间隔
select * from stu2 where score between 40 and 101;
select * from stu2 where score >=40 and score <=100;
select * from stu2 where score >=40 && score<=101;
#或
select * from stu2 where score in(50,100); -- 50or100
select * from stu2 where score =50 or score =100;
#关键字查询···
select * from stu2 where name like "%佗"; -- 佗结尾
select * from stu2 where name like "%自%"; -- 代表中间的字是自
select * from stu2 where name like "_自%"; -- 代表第二个字是自,后面不管是什么
#c查看NULL
select * from stu2 where sid is null;
select * from stu2 where sid is not null;
#查看最小值最大值
select least(10,5,10) as small_number; -- 如果其中有一个数为null,则直接为NULL
select greatest(10,20,30) as big_number; -- 最大与上相同
select * from stu2 order by score asc; -- 根据score进行升序排列,asc可以省略。将序为 desc
select * from stu2 order by score desc , sid desc; -- 先按照第一个进行排序,然后如果第一个相同,就按照第二个进行排序。
-- 查询 name ,score 并按照score进行降序排列
select  distinct name,score from stu2 order by  score desc; 
-- 查询数目(不统计行包含空)
select count(*) from stu2;
select count(sid) from stu2;
select count(sid) from stu2 where score >50;
select sum(score) from stu2 where score = 100;
select  max(score) from stu2 where name = '华佗';
select min(score) from stu2 where name = '华佗';
select avg(score)from stu2 where name = '华佗';
use mysql;
create table product
(
	id bigint(20),-- 20代表值的位数
	name varchar(10),
	price double,
	producer varchar(10)

);
insert into product values(1,"海尔冰柜",3400,'海尔'),(2,'海尔冰柜',4000,'海尔'),(3,'海尔电扇',2400,"海尔");
insert into product (id,name,price,producer) values (4,"格力空调",6000,"格力"),(5,'格力电扇',1300,"格力"),(6,'李宁运动鞋',500,'李宁'),
(7,'李宁卫衣',300,'李宁');
-- 增加或修改字段属性
alter table product modify price double(16,0) comment '价格';
alter table product alter price set default 200;
insert into product values(8,'oppoA11',2300,'oppo'),(9,'oppoA13',3000,'oppo');
-- 删除重复统计的数据
-- 不能将直接查处来的数据当做删除数据的条件,我们应该先把查出来的数据新建一个临时表,然后再把临时表作为条件进行删除功能
-- 在做多表查询,或者查询的时候产生新的表的时候会出现这个错误:Every derived table must have its own alias(每一个派生出来的表都必须有一个自己的别名)比如下面的a
delete from product where id in (select id from(select id from product group by id having count(id)>1)as a)
select  * from product order by id; -- 默认按照id进行降序排列
-- 分组一般和聚合放在一起,select后面只能选择唯一的字段作为标准。
select  producer,count(id) from product group by producer; 
-- 将主键顺序重新排序,解除乱序
alter table product drop column id;
alter table product add id int(4) not null primary key auto_increment first;
-- 按照producer进行分组,对应cnt(count(id)获取数目的别名,然后按照cnt的大小进行排序(默认升序))
select producer, count(id) cnt from product group by producer having cnt > 1 order by cnt;
-- limit n 显示前几条
-- limit m,n 从m+1开始,显示n条
select * from product limit 5; -- 显示前五条
select *from product limit 3,5;
use mysql;
select * from product;
create table produc2
(
	name varchar(20),
	price double(8,1)

);
alter table produc2 rename product2;
insert into product2(name,price) select name,price from product; -- 插入字段
-- isnull(number) 判断number是否为空,如果为空,返回1,否则返回0
-- ifnull(number1,number2),判断number1是否为空,如果为空就用number2代替number1
-- nullif(number1,number2),如果number=number,返回null,否则返回number1
-- 正则表达式
-- ^在字符串开头进行匹配
select  'abc' regexp '^a';
select * from product where name regexp "^海";
-- ^在字符串末尾开始匹配
select  'abc' regexp 'c$';
select * from product where name regexp '尔$';
-- 匹配任意字符(.可以匹配除了换行符以外的任意字符(单个字符))
select 'abc' regexp '.b';
-- [...]匹配括号内的任意字符
select 'abc'  regexp '[asn]'; # 表示括号内的任意字符是否在前面的字符串中出现,是的话,就返回1
-- [^...] 代表任意字符都没有出现,与上面的相反 
-- a* 表示匹配0个或者多个a,包含空字符串。可以作为占位符使用,有没有指定字符都可以匹配到数据
select 'stab' regexp 'ta*b'; -- a*表示a可以出现0次或者多次
-- a+  表示匹配1个或者多个a
select 'stab' regexp 'ta+b';
-- a?表示匹配0个或者一个字符
select 'stb' regexp '.ta?b';
-- a|a1 匹配a或者a1
select 'a' regexp 'a|a1';
-- a{m} 出现m次
select 'annna' regexp 'an{3}a';
-- a{m,},匹配m个或者更多个a
-- {m,n}至少m次,最多n次
-- 创建部门表
create table if not exists dept
(
	detpno varchar(20) primary key, -- 部门号
  name varchar(20) -- 部门名字
	

);
create table if not exists emp
(
	eid varchar(20) primary key, -- 员工编号
	ename varchar(20), -- 员工名字
	age int, -- 员工年龄
	dept_id varchar(20), -- 员工所属部门
	constraint emp_fk foreign key (dept_id) references dept(detpno)
);
 -- 多表直接存在外键约束的时候,删除的时候不能直接删除主表
 -- 删除外键约束
 alter table emp drop foreign key emp_fk ;

select * from emp,dept;
-- 外键约束对查询没有影响
-- 交叉联合查询
select * from emp where age > all(select age from emp where dept_id = "1003");
select * from emp where age > all(60,58);
-- 查询不属于任何一个部门的员工信息
select * from emp where dept_id != all(select detpno from dept);
-- any关键字(some 和 any 的作用一样),可以理解为任一
select * from emp3 where age > any(select age from emp3 where dept = '1003') and dept_id!= '1003';
-- IN(子查询关键字)
-- mysql 函数
-- group_concat,一列的数据合并到一行
select group_concat(name) as result from employee; -- 默认结果之间是按照,号分割
-- 设置查询数据的之间的间隔符号
select group_concat(name separator";")  as result from employee; 
-- 指定排序方式和分隔符
select department,group_concat(emp_name separator ';') from emp group by department; -- 先分组,可以认为先根据部门进行分组,然后将同一部门的名字进行合并为一行

-- 还可以分组后,将名字合并一行进行再排序,排序按照薪资排序
select department,group_concat(emp_name order by salary separator ';')
from emp group by department; -- 注:group_concat里面的 separator 必须放在最后
-- 数学函数
-- 取绝对值
select abs(-10);
select abs(10);
-- 向上取整
select ceil(1.1); -- 返回比它大的最小的整数
select floor(1.1) -- 向下取整
-- 返回列表中最大值
select greatest(1,2,3);
-- 求列表中的最小值
select least(1,2,3);
-- 求余数
select mod(5,2);
-- 取x的y次方
select power (2,3);
-- 取随机数
select rand() * 100; -- 生成0到100的随机的数
-- 取小数的四舍五入
select round(3.1415);
-- 四舍五入保留指定小数位数
select round(3.1415,3);
-- avg() 求平均数
select category_id,avg(price) from product group by category_id;

-- 将小数直接截取到指定位数,不会进行四舍五入
select truncate(3.1415,3);

-- 字符串函数
-- char_length() 函数,求字符串中包含多少个字符
select char_length("jgdabc");
-- length() 取长度,返回字节
select length("你好");
-- concat() 进行字符串合并、
select concat('hello','world');
-- 指定合并的时候分隔符
select concat_ws('-','hello','world')
-- 返回字符串在列表中首次的位置
select field('aaa','aaa','bbb','ccc'); -- 要查找的是第一个参数
-- ltrim()去除字符串左边的空格
select ltrim('  aaaa');
-- rtrim() 去除字符串右边的空格
select rtrim('sask   ');
-- trim() 去除两端的空格
select trim(" sjsn  ");
-- mid() 截取字符串
select mid("helloworld",2,3); -- 从第二个字符开始截取,截取三个,截取长度为三
-- position(a in b)获取字符串a在b中出现的位置
select position("abc"in"abcsk");
-- replace(str1,str2,str3)字符串替换,将字符串str1中的str2替换为str3
select replace("hello world",'hello','hi');
-- reverse() 字符串反转
select reverse("hello");
-- right() 返回字符串的后几个字符
select right("Hello",3
-- strcmp(),字符串比较
select strcmp("hello","Hello");
-- substr() 字符串截取
select substr("hello",2,3);
-- substring() 字符串截取,与上用法一样
-- ucase(),upper()将小写转大写
select ucase("Hello world");
select upper("Hello World");
-- lcase(),lower() 将大写转为小写
select lcase("HELLO");
select lower("WORLD");

-- 
 -- 日期函数
 
 select UNIX_TIMESTAMP(); -- 获取时间戳(毫秒值) 从 1970年
-- 将一个日期字符串转换为毫秒值
select UNIX_TIMESTAMP('2021-12-21 08:00:00'); --还是从1970年开始
-- 将时间戳转换为指定格式的·日期
select FROM_UNIXTIME(1924023030,'%Y-%m-%d %H:%i:%s')
-- 获取当前的年月日
select curdate()
select current_date();
-- 获取当前的时分秒
select current_time();
select curtime();
-- 获取当前时间和日期
select current_timestamp() 
-- 从日期字符串中获取年月日
select date('2022-12-12 12:34:56')
-- 获取日期之间的差值
select datediff("2021-12-23","2008-08-08");
-- 获取秒级别的差值
select timediff('12:12:34','10:18:56');
-- 将日期按照指定的格式进行转换(日期格式化)
select date_format('2021-1-1 1:1:1','%Y-%m-%d %H:%i:%s');
-- 将字符串转换为日期
select str_to_date('2021-1-1 1:1:1','%Y-%m-%d %H:%i:%s');
-- 将日期进行减法
select date_sub('2021-10-01',interval 2 day);
select date_sub('2021-10-01',interval 2 month)

-- 将日期进行加法
select date_add('2021-10-01',interval 2 day)
-- 从日期获取指定的值
select extract(hour from '2020-1-10 11:11:11');
-- 返回给定日期的最后一天
select last_day('2021-08-11');
-- 获取指定年份和天数的日期
select makedate('2021',53); -- 获取2021年的第53天
-- 获取季度
select quarter('2021-12-13 11:12:13');
-- 获取英文名称的月份等等--
select monthname('2020-12-13 11:11;11');
select dayname('2020-12-13 11:11;11'); -- 获取周几(英文)
select dayofmonth('2020-12-13 11:11;11') -- 获取当月的第几天
select dayofweek('2020-12-13 11:11;11'); -- 数字状态
select dayofyear('2020-12-13 11:11;11'); -- 获取一年的第几天
-- 获取一年的第几周
select week('2020-12-13 11:11;11');
select now(); -- 获取当前时间
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档