2021年11月8日
- 周末11月6-7日,没有学习,罪过啊。
- 使用union将两个select * from语句连接起来,分行书写时select要缩进,一行书写时select语句可以用括号括起来。
- 以下三种是相同效果,只是顺序不同:
- eg1
(select * from tb where epmid='A102')
union
(select * from tb where epmid='A103')
union
(select * from tb where epmid='A104')
union
(select * from tb where epmid='A107');
- eg2
select *
from tb
where empid
not in ('A101');
- eg3
select *
from tb
where empid
in('A102','A103','A104','A107');
2021年11月11日
- 表中name为'西泽'
- 删除name = ''西泽''
- 转义符号'
- union 具有去重的作用
2021年11月13日
这两天为了在电脑上用命令提示符安装MySQL也是折腾了好几天,希望自己能越来越熟悉MySQL的安装。最后安装成功也是唯一一件让我欣慰的事,我把安装过程再描述一遍,以后尽量使用命令提示符安装。
- 解压下载好的压缩包,尽量在英文路径下,并在文件夹中创建一个my.ini文件在文件中编辑如下,其中安装目录按照自己存放MySQL的位置确定。
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=E:\mysql-8.0.26-winx64
# 设置mysql数据库的数据的存放目录
datadir=E:\mysql-8.0.26-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
- 在【此电脑】-【属性】-【高级系统设置】-【环境变量】-【系统变量】-【path】-【新建】-【E:\mysql-8.0.26-winx64\binE:\mysql-8.0.26-winx64\bin】此处按照实际的路径填写。
- 用管理员启动命令提示符输入
mysqld --initialize-insecure --user=mysql等待一段时间,在能输入文字后输入mysqld -install出现Service successfully installed.表示配置成功net start mysql启动网络服务- 输入
mysql -uroot -p此时没有密码,直接回车即可
- 修改密码
alter user user() identified by "admin";使用英文标点符号。
- 关闭网络服务
net stop mysql
2021年11月14日
- 两个表之间的连接键(也就是相同的列信息,如员工编号,放到工程中可以是单元编号),如果列名相同可以使用using预计是连接更容易读。如果是分开写,要分别于第一个from的表进行连接,下例子是两个表tb1和tb2要与tb连接。
from
tb
join
tb1
on tb.empid=tb1.empid
join
tb3
on tb.empid=tb3.empid
- from后的表是左表,如果需要显示左表的全部信息使用left join,或left outer join;
- 要连接的表是右表,如果需要显示右表的全部信息使用right join,或right outer join。
- 今天又被global.sql_mode折腾了半天,试了好几次书上介绍的排序小技巧,就是将年龄的表自连接排序,*在右侧相同的5行记录范围内,大于等于右侧age的值在左侧age中的个数就是排名。*代码如下:
select a.name,a.age,count(*)
from tb1 as a
join tb1 as b
where a.age<=b.age
group by a.empid;
就是在上面代码中弹出了错误如下:
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db1.a.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
- [only_full_group_by :使用这个就是使用和oracle一样的group 规则, select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行,其实这个配置目前个人感觉和distinct差不多的,所以去掉就好] 重新设置一下:
- SET@@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'