文章目录
- 一、数据库的分类
- 二、MySQL的数据库
- 三、笛卡尔积(数学中的笛卡尔积,SQL中的笛卡尔积,IO流中的笛卡尔积)
- 四、SQL语句
- 3.1、删除表结构和删除表中的数据
- 3.2、分页语句----limit 可以查出当前排序后,前3位的人。
- 3.3、添加语句
- 3.4、排序语句
- 3.5、SQL中的like用法
- 3.6、删除操作的说明如下:
- 3.7、[SQL语句中的 UNIX_TIMESTAMP()](https://www.yiibai.com/sql/sql-unix_timestamp-function.html)
- 3.8、[MySQL DATE_SUB() 函数](https://www.w3school.com.cn/sql/func_date_sub.asp)
- 3.9、[SQL 中case when ...then...else ...end用法](https://blog.csdn.net/zhaomengszu/article/details/79816790)
- 五、[sql和MySQL的语句执行顺序](https://blog.csdn.net/u014044812/article/details/51004754)
- 六、SQL的关联查询
- 七、随手记录
- 1、查询的时候,字段类型是int类型的话,在sql语句中可以加单引号,也可以不加。
- 2、起别名时,可以加as也可以不加
- 3、order by 后面可以加升序(ASC),降序(DESC)。如果俩个同时用,以第一个优先,第二个是在第一个排序的字段相同的时候,再进行排序。
- 4、sql语句的where 字段名 in ()表示根据条件的范围来查询。还可以 not in 结果相反。in和or作用差不多,但是执行效率,在数据量大时,in的执行效率会更高点。
- 5、char和varchar都是在MySQL数据库中表示字符类型,char是固定长度类型,varchar是可变长度类型。
- 6、having 常常跟在group by 后面,having后面加聚合函数条件。因为where 后面不能有聚合函数
- 7、join on 和where 的执行顺序。在外连接的情况下,on在where前执行。[具体例子点击链接查看](https://www.cnblogs.com/jessy/p/3525419.html)
- 8、varchar类型的字段,如果内容是数字并且想要排序(order by),可以在字段前加 “ - ”;
- 9、在mysql中找日期大于或小于当前数据库日期的SQL,如下:
- 10、distinct可以放在聚合函数内,如下:
- 八、SQL语句在mybatis中的xml文件中,最后是不带分号的。
一、数据库的分类
1.1、文件数据库,如SQLite
1.2、关系型数据库,如Oracle,MySQL,SQLserver、DB2、MariaDB
1.3、非关系型数据库,如Redis,MongoDB,HBase
HBase是一个分布式的、面向列的开源数据库
HBase和MongoDB的区别
1、HBase依赖于HDFS;MongoDB直接存储在本地磁盘中
MySQL支持千万级数据量(如果是学校管理系统,每个学生就是一条数据),Orace会支持更多,支持多操作系统Linux/Windows。他的客户端界面工具有sqlyog或者Navicat。另外如果在一个局域网内Client可以通过ip来访问Server
二、MySQL的数据库
2、注意事项:
2.1、在MySQL服务器里,可以创建多个数据库
2.2、数据库的命名规则:
----用有意义的名字
----多个单词用下划线连接,如公司名称_项目名
----全部用小写
2.3、不要操作MySQL自带的三个系统库
点击以下链接继续学习
https://study.163.com/course/courseLearn.htm?courseId=1005133010#/learn/video?lessonId=1051682821&courseId=1005133010
三、笛卡尔积(数学中的笛卡尔积,SQL中的笛卡尔积,IO流中的笛卡尔积)
mysql数据库中的笛卡尔积,是通过join … on 来消除的。原理是先通过from将多表加载进内存,再用on来判断是否满足条件,满足后才进行join。主要目的是在每张表内的数据比较庞大时,提高加载效率。不然的话,通过from和where,会先把大量的数据加载进内存,然后才进行判断。造成大量的内存消耗。
总结:消除的笛卡尔积是生成查询结果过程的一个阶段,目的是为了当表的数据量比较大时,免于造成大量的内存消耗,达到提高加载效率。
四、SQL语句
3.1、删除表结构和删除表中的数据
3.1.1、删除表数据
DELETE FROM t2;
3.1.2、删除表结构
DROP TABLE t2;
如果表中有数据,直接执行删除表结构,表结构删除了,但是再次创建该表结构时,同时表数据还是存在的。
3.2、分页语句----limit 可以查出当前排序后,前3位的人。
3.3、添加语句
insert into 表名 (字段1,字段2...) values (值1,值2...)
3.4、排序语句
order by 字段 DESC 或者ASC
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
3.5、SQL中的like用法
Like的运用场合主要在模糊查询的时候,一般以查询字符串居多,这里据一些例子来说他的一般用法:
例1,查询name字段中包含有“明”字的。
select * from table1 where name like ‘%明%’
这里不要使用*来代替,一般在使用0个或者任意个字符构成的字符串的时候最好使用%
不过在首或尾使用可以相互替换,如果在头尾同时使用的话,就必须要使用%
例2,查询name字段中以“李”字开头。
select * from table1 where name like ‘李*’
或者
select * from table1 where name like ‘李%’
例3,查询name字段中含有数字的。
select * from table1 where name like ‘%[0-9]%’
例4,查询name字段中含有小写字母的。
select * from table1 where name like ‘%[a-z]%’
例5,查询name字段中不含有数字的。
select * from table1 where name like ‘%[!0-9]%’
3.6、删除操作的说明如下:
删除从表数据:可以随时任意删除。
删除主表数据:
------有从表数据
1、在默认情况下,它会把外键字段置为null,然后删除主表数据。如果在数据库的表 结构上,外键字段有非空约束,默认情况就会报错了。
2、如果配置了放弃维护关联关系的权利,则不能删除(与外键字段是否允许为null, 没有关系)因为在删除时,它根本不会去更新从表的外键字段了。
3、如果还想删除,使用级联删除引用
------没有从表数据引用:随便删
在实际开发中,级联删除请慎用!(在一对多的情况下)
3.7、SQL语句中的 UNIX_TIMESTAMP()
3.8、MySQL DATE_SUB() 函数
3.9、SQL 中case when …then…else …end用法
五、sql和MySQL的语句执行顺序
- From
- ON
- JOIN
- WHERE
- GROUP BY
- SELECT
- HAVING
- ORDER BY
- LIMIT
六、SQL的关联查询
参考资料:
1、sql的关联查询(内连接、外连接和自连接查询)
2、SQL的自连接解决了哪些问题?
3、Mysql自连接查询
4.1、内连接(在每个表中,找出符合条件的共同记录。)
4.1.1、第一种方式(where)select 字段 from 表一 , 表二 where 条件
4.1.2、第二种方式(join … on)select 字段 from 表一 join 表二 on 条件
4.1.3、第三种方式(inner join … on)select 字段 from 表一inner join 表二 on 条件
注意:如果有多表连接,其中join … on 还有 left join … on 和right join … on是成对出现的。
4.2、外连接
4.2.1、左外连接 select 字段 from 表一 left join 表二 on 条件
根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,如果找不到与左表匹配的,用null表示。
4.2.2、右外连接 select 字段 from 表一 right join 表二 on 条件
根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,如果找不到匹配的,用null填充
4.2.3、全连接 select 字段 from 表一 full join 表二 on 条件
返回符合条件的所有表的记录,没有与之匹配的,用null表示(结果是左连接和右连接的并集)
4.3、自连接(连接的两个表是同一张表,同样可以由内连接,外连接各种组合方式,按实际应用去组合。)
4.3.1、格式:select 字段 from 表一 , 表二 where 条件
4.3.2、应用场景:例如商城的分类层级比较深,数码----->手机、电脑---->华为手机、苹果手机等等。可以将这些分类放在一张表内,建一列id,建一列父id。然后进行自连接查询。
七、随手记录
1、查询的时候,字段类型是int类型的话,在sql语句中可以加单引号,也可以不加。
2、起别名时,可以加as也可以不加
3、order by 后面可以加升序(ASC),降序(DESC)。如果俩个同时用,以第一个优先,第二个是在第一个排序的字段相同的时候,再进行排序。
4、sql语句的where 字段名 in ()表示根据条件的范围来查询。还可以 not in 结果相反。in和or作用差不多,但是执行效率,在数据量大时,in的执行效率会更高点。
空值查询
5、char和varchar都是在MySQL数据库中表示字符类型,char是固定长度类型,varchar是可变长度类型。
6、having 常常跟在group by 后面,having后面加聚合函数条件。因为where 后面不能有聚合函数
7、join on 和where 的执行顺序。在外连接的情况下,on在where前执行。具体例子点击链接查看
8、varchar类型的字段,如果内容是数字并且想要排序(order by),可以在字段前加 “ - ”;
9、在mysql中找日期大于或小于当前数据库日期的SQL,如下:
SELECT * FROM Student WHERE Sage > '2020-02-02';
10、distinct可以放在聚合函数内,如下:
SELECT COUNT(DISTINCT Sid) FROM SC;