Mysql有哪些
Oracle是最挣钱的数据库,出自甲骨文公司,市场占有率非常高,功能非常强大,被一些大型企业,电信,银行,证券公司所使用
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。MySQL目前最流行的开源数据库,被甲骨文公司所占用,威胁着老大Oracle的地位,开源,免费,支持多平台,易用
SQLServer,微软开发的数据库,仅支持Windows操作系统,号称是windows上最好用的数据库。数据库的天下不仅仅是MySQL和Oracle的,SQLServer也正在慢慢崛起,微软网罗了不少数据库的专家,推出了不少重磅功能。
MongoDB,最好用的文档型数据库,是NOSQL类型数据库的领导者之一,也是当前最成功的NoSQL类型数据库,数据存储格式采用JSON形式,非常灵活。
Redis,最好的内存级数据库,查询效率极高,并且在Redis 3.0之后,支持多种数据类型,String,Set,List,Hash等类型,开始支持集群,弥补了自身短板。是目前做缓存最流行的数据库
Neo4J,最好的图形化数据库,流行话较低,但是图形化数据库的绝对领导者。
SQLite,最流行的嵌入式数据库,占领手机行业的绝对领导者地位,Android和IOS两大手机系统,都内嵌了SQLite数据库,SQLite是一个完整的关系型数据库,支持标准SQL,支持事务操作,程序包非常小,是嵌入式设备的最佳选择。
SQL语言
数据查询语言:DQL
数据操纵语言:DML
数据定义语言:DDL
数据控制语言:DCL
编写数据的软件是—Navicat
基本数据库操作
单表查询
----------创建数据库
CREATE DATABASE 库名
----------删除数据库
DROP DATABASE 库名
----------修改编码
alter database 库名 CHARSET=utf8
----------查询所有数据库
SHOW DATABASES
----------使用数据库
USE 库名
----------创建表
create table 表名(
studentNo int PRIMARY key auto_increment,
sname VARCHAR(20),
sex VARCHAR(2),
age int
)
------------查看当前的表
SHOW TABLES
-------------查看当前表字段
DESC 表名字
-------------查看目前的表以及当前表字段
SHOW CREATE TABLE student
----------删除当前表所有数据
DELETE FROM 表名
------------添加一条数据
INSERT INTO 表名(字段名,字段名) VALUES(数据,“数据”)
INSERT INTO 表名 VALUES(数据,“数据”)
------------添加多条数据
INSERT INTO 表名 VALUES(数据,“数据”),(数据,“数据”),(数据,“数据”),(数据,“数据”)
------------删除一条数据
DELETE FROM 表名 WHERE 要删除的字段数据
-------------插入一个字段
ALTER TABLE表名 ADD 要添加的字段以及字段类型
-------------删除一个字段
ALTER TABLE 表名 drop 字段名
-------------查看当前表数据
SELECT * FROM 表名
----------2,6 取第三个以及以后的六条记录
SELECT * FROM 表名 LIMIT 2,6
----------从小到大排序(两种方法都可以查出来)
SELECT * FROM 表名 ORDER BY 字段
SELECT * FROM 表名 ORDER BY 字段 ASC
----------从大到小排序
SELECT * FROM stu ORDER BY id DESC
-*----------给字段加上名字
SELECT 字段 as “姓名”, 字段 as “序号” FROM 表名
------------分组查询(语句和函数一起使用 聚合函数包括 count(求个数) min(最小值) max(最大值) sum(求和))
SELECT * FROM stu GROUP BY name
单表查询实际案例
以上表为例
-----------查询姓名是李白的学生信息
select * from student where sname=“李白”;
-----------查询1班是上海的学生
select * from student where class=“1班” and hometown=“上海”;
----------查询家乡是北京或者上海的学生
select * from student where hometown=“北京” or hometown=“上海”;
-----------查询小乔的年龄
select age as “年龄”,sname as “姓名” from student where sname=“小乔”;
-----------查询家乡不在北京的学生
select * from student where hometown!=“北京”;
-----------查询年龄小于20的女同学
select * from student where age<“20” and sex=“女”;
-----------查询年龄为18至20的学生
select * from student where age BETWEEN 18 and 20;
-----------查询北京学生的年龄总和
select sum(age),hometown from student where hometown=“北京”;
-----------查询女生的平均年龄
select avg(age) from student where sex=“女”;
-----------查询姓名包含白的学生
// 查询名字包含白的同学
SELECT * from student where sname like ‘%白%’
// 查询名字最后一位是白的同学
SELECT * from student where sname like ‘%白’
//查询名字姓白的同学
SELECT * from student where sname like ‘白%’
//查询名字是两位且姓白的同学
SELECT * from student where sname like ‘白_’
-----------查询所有学生信息,按年龄从大到小排序,年龄相同时,再按学号从小到大排序
SELECT * from student ORDER BY age desc,studentNo asc;
-----------查询女生的最大年龄
select max(age) from student where sex=“女”;
多表查询
交叉查询
交叉查询,又叫笛卡尔积查询,会将左表和右表的信息,做一个乘积将所有信息查询出来,会产生临时表,比较占用内存,生成的记录数=表1 X表2
SELECT * FROM 表1 , 表2
SELECT * FROM 表1 CROSS JOIN 表2
内连接查询
内连接,inner join on 查询两张表,设定条件,将两张表中对应的数据查询出来不会产生笛卡尔积,不会产生临时表,性能高
SELECT * FROM 表1 别名 INNER JOIN 表2 别名 ON 表1别名. 表1字段名 = 表2别名. 表2字段名
SELECT * FROM 表1 , 表2 WHERE 表1.表1字段名 = 表2.表2字段名
SELECT * FROM 表1.别名 , 表2.别名 WHERE 表1.表1字段名 = 表2.表2字段名
左外连接
左外连接 left join on 设定条件,将两张表对应的数据查询出来,同时将左表自己没有关联的数据也查询出来
注意:join前面是左,后面是右
SELECT * FROM 表1 别名 LEFT JOIN 表2 别名 ON 表1别名. 表1字段名 = 表2别名. 表2字段名
右外连接
右外连接 right join on 设定条件,将两张表对应的数据查询出来,同时将右表自己没有关联的所有数据查询出来
SELECT * FROM 表1 别名 LEFT JOIN 表2 别名 ON 表1别名. 表1字段名 = 表2别名. 表2字段名
实际案例
查询王老师带的学生的姓名和对应学科
select student.name,student.score,teacher.class from student inner join teacher on student.id=teacher.student_id where teacher.name=“王老师”;
查询王老师带的学生,成绩及格的学生姓名
select student.name from student inner join teacher on teacher.student_id=student.id where score>70 and teacher.name=“王老师”
查询赵六学生的老师姓名和对应的学科名称
select teacher.name,teacher.class from student inner join teacher on teacher.student_id = student.id where student.name=“赵六”;