mysql来源
- mysql是mysqlAB公司的
- mysqlAB公司被sun公司收购了
- sun公司又被Oracle公式收购了
- mysql现在是由oracle公司负责维护
- Oracle是收费的,mysql是免费的
navicat快捷键
在行尾:Shift+Home键选中当前行。 在行尾:Ctrl+Shift+Home键 从光标处一直选中文本开头 在行首:Shift+End键选中当前行。 在行首:Shift+End键 从光标处一直选中文本末尾 运行已选择的:Ctrl+Shift+R。 复制当前行:Ctrl+D。 Ctrl+q 打开查询窗口 Ctrl+/ 注释MySQL语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ctrl+n 打开一个新的查询窗口 ctrl+w 关闭一个查询窗口
mysql数据库语言分类
DQL
数据查询语言,凡是带select关键字的都是查询语句都是DLQ
select 字段名 from 表名
#查看kc表中的所有数据 mysql> select * from kc; +--------+--------------+----------+------+ | 课程号 | 课程名 | 开课学期 | 学分 | +--------+--------------+----------+------+ | 101 | 计算机基础 | 1 | 3 | | 102 | c语言 | 1 | 3 | | 206 | 高等数学 | 3 | 3 | | 208 | 数据结构 | 5 | 6 | | 209 | 操作系统 | 6 | 3 | | 210 | 计算机组装 | 4 | 4 | | 212 | ORACLE数据库 | 2 | 5 | | 301 | 计算机网络 | 1 | 4 | | 302 | 软件工程 | 7 | 2 | +--------+--------------+----------+------+ 9 rows in set (0.01 sec) #distinct消除重复数据 mysql> select distinct(学分) from kc; +------+ | 学分 | +------+ | 3 | | 6 | | 4 | | 5 | | 2 | +------+ 5 rows in set (0.00 sec) # 查询多个字段 mysql> select 课程号,课程名 from kc; +--------+--------------+ | 课程号 | 课程名 | +--------+--------------+ | 102 | c语言 | | 212 | ORACLE数据库 | | 209 | 操作系统 | | 208 | 数据结构 | | 101 | 计算机基础 | | 210 | 计算机组装 | | 301 | 计算机网络 | | 302 | 软件工程 | | 206 | 高等数学 | +--------+--------------+ 9 rows in set (0.00 sec) #列起别名 mysql> select 课程号 as jkj from kc; +-----+ | jkj | +-----+ | 102 | | 212 | | 209 | | 208 | | 101 | | 210 | | 301 | | 302 | | 206 | +-----+ 9 rows in set (0.00 sec) mysql> select 课程号 as 'jkj hkh' from kc; +---------+ | jkj hkh | +---------+ | 102 | | 212 | | 209 | | 208 | | 101 | | 210 | | 301 | | 302 | | 206 | +---------+ 9 rows in set (0.00 sec) #注意: #as可省略 #双引号不标准,在mysql中可用,在Oracle中不可用 #单引号标准,都可用 #列参与数学运算 mysql> select 课程名 课程,学分*18 分数 from kc; +--------------+------+ | 课程 | 分数 | +--------------+------+ | 计算机基础 | 54 | | c语言 | 54 | | 高等数学 | 54 | | 数据结构 | 108 | | 操作系统 | 54 | | 计算机组装 | 72 | | ORACLE数据库 | 90 | | 计算机网络 | 72 | | 软件工程 | 36 | +--------------+------+ 9 rows in set (0.00 sec) #根据生日求年龄 select 姓名,year(now())-year(出生日期) as 年龄 from 信息管理学生表;
条件查询
= 等于 ><或!= 不等于 < 小于 <= 小于等于 > 大于 >= 大于等于 between……and……两个值之间,等同于 >= and <= is null 为null(is not null 不为空) and或&& 并且 or或|| 或 in 包含,相当于多个or(not in 不在这个范围中) not 取非,(主要用在is或in中) any 满足子条件查询的任意一条件 all 满足子条件查询的所有条件 #eg: mysql> select * from kc; +--------+--------------+----------+------+ | 课程号 | 课程名 | 开课学期 | 学分 | +--------+--------------+----------+------+ | 101 | 计算机基础 | 1 | 3 | | 102 | c语言 | 1 | 3 | | 206 | 高等数学 | 3 | 3 | | 208 | 数据结构 | 5 | 6 | | 209 | 操作系统 | 6 | 3 | | 210 | 计算机组装 | 4 | 4 | | 212 | ORACLE数据库 | 2 | 5 | | 301 | 计算机网络 | 1 | 4 | | 302 | 软件工程 | 7 | 2 | +--------+--------------+----------+------+ 9 rows in set (0.00 sec) mysql> select * from kc where 学分 != 3; +--------+--------------+----------+------+ | 课程号 | 课程名 | 开课学期 | 学分 | +--------+--------------+----------+------+ | 208 | 数据结构 | 5 | 6 | | 210 | 计算机组装 | 4 | 4 | | 212 | ORACLE数据库 | 2 | 5 | | 301 | 计算机网络 | 1 | 4 | | 302 | 软件工程 | 7 | 2 | +--------+--------------+----------+------+ 5 rows in set (0.00 sec)
模糊查询
like 模糊查询,支持%或下划线匹配 %匹配任意个字符 一个_只能匹配一个字符 #找出课程号中含有1的 mysql> select * from kc where 课程号 like '%1%'; +--------+--------------+----------+------+ | 课程号 | 课程名 | 开课学期 | 学分 | +--------+--------------+----------+------+ | 101 | 计算机基础 | 1 | 3 | | 102 | c语言 | 1 | 3 | | 210 | 计算机组装 | 4 | 4 | | 212 | ORACLE数据库 | 2 | 5 | | 301 | 计算机网络 | 1 | 4 | +--------+--------------+----------+------+ 5 rows in set (0.00 sec) #找出课程号开头为1的 mysql> select * from kc where 课程号 like '1%'; +--------+------------+----------+------+ | 课程号 | 课程名 | 开课学期 | 学分 | +--------+------------+----------+------+ | 101 | 计算机基础 | 1 | 3 | | 102 | c语言 | 1 | 3 | +--------+------------+----------+------+ 2 rows in set (0.01 sec) #找出课程号结尾为1的 mysql> select * from kc where 课程号 like '%1'; +--------+------------+----------+------+ | 课程号 | 课程名 | 开课学期 | 学分 | +--------+------------+----------+------+ | 101 | 计算机基础 | 1 | 3 | | 301 | 计算机网络 | 1 | 4 | +--------+------------+----------+------+ 2 rows in set (0.00 sec) #找出课程名第三个为机的 mysql> select * from kc where 课程名 like '__机%'; +--------+------------+----------+------+ | 课程号 | 课程名 | 开课学期 | 学分 | +--------+------------+----------+------+ | 101 | 计算机基础 | 1 | 3 | | 210 | 计算机组装 | 4 | 4 | | 301 | 计算机网络 | 1 | 4 | +--------+------------+----------+------+ 3 rows in set (0.00 sec)
分组查询
group by
#查找xs表中各专业男生的人数 mysql> select 专业名,count(性别) as 男生人数 from xs where 性别='男' group by 专业名 ; +----------+----------+ | 专业名 | 男生人数 | +----------+----------+ | 软件技术 | 8 | | 网络技术 | 3 | | 信息管理 | 1 | | 建筑智能 | 1 | +----------+----------+ 4 rows in set (0.00 sec) #为什么分组函数不能直接使用在where后面? mysql> select 分数 from cj where 分数>max(分数); ERROR 1054 (42S22): Unknown column '分数' in 'field list' //报错 因为分组函数在使用时必须分组之后才能使用,where执行的时候还没有分组,所以where之后不能用分组函数
使用limit字句
#查询前三条数据记录 mysql> select * from xs limit 3; +--------+--------+----------+------+------------+--------+------+ | 学号 | 姓名 | 专业名 | 性别 | 出生日期 | 总学分 | 备注 | +--------+--------+----------+------+------------+--------+------+ | 001101 | 王金华 | 软件技术 | 男 | 1990-02-10 | NULL | NULL | | 001102 | 程周杰 | 软件技术 | 男 | 1991-02-01 | NULL | NULL | | 001103 | 王元 | 软件技术 | 男 | 1989-10-06 | NULL | NULL | +--------+--------+----------+------+------------+--------+------+ 3 rows in set (0.01 sec) #查询第四条数据记录 mysql> select * from xs limit 3,1; +--------+--------+----------+------+------------+--------+------+ | 学号 | 姓名 | 专业名 | 性别 | 出生日期 | 总学分 | 备注 | +--------+--------+----------+------+------------+--------+------+ | 001104 | 严蔚敏 | 信息管理 | 女 | 1990-08-26 | NULL | NULL | +--------+--------+----------+------+------------+--------+------+ 1 row in set (0.00 sec)
多表查询
#查询最高分学生的详细信息 mysql> select distinct cj.学号,姓名,成绩 from xs,cj where cj.学号=xs.学号 and 成绩 = (select max(成绩) from cj) order by 成绩 desc; +--------+--------+------+ | 学号 | 姓名 | 成绩 | +--------+--------+------+ | 001110 | 张晓晖 | 95.0 | +--------+--------+------+ 1 row in set (0.00 sec) #查询及格学生的详细信息 mysql> select distinct 姓名 as 及格学生的姓名,课程号,成绩 from xs,cj where cj.学号=xs.学号 && 成绩 in (select 成绩 from cj where 成绩 >= 60) order by 成绩 desc; +----------------+--------+------+ | 及格学生的姓名 | 课程号 | 成绩 | +----------------+--------+------+ | 张晓晖 | 101 | 95.0 | | 张晓晖 | 102 | 95.0 | | 李明 | 101 | 85.0 | | 严蔚敏 | 102 | 84.0 | | 张飞 | 102 | 83.0 | | 王元 | 206 | 81.0 | | 李伟 | 206 | 80.0 | | 刘超 | 102 | 80.0 | | 马妮啦 | 102 | 79.0 | | 王金华 | 102 | 78.0 | | 程周杰 | 102 | 78.0 | | 程周杰 | 206 | 78.0 | | 刘超 | 101 | 78.0 | | 王金华 | 206 | 76.0 | | 李长江 | 206 | 76.0 | | 李伟 | 102 | 71.0 | | 王元 | 102 | 70.0 | | 张飞 | 206 | 70.0 | | 刘超 | 206 | 68.0 | | 张飞 | 101 | 66.0 | | 严蔚敏 | 101 | 65.0 | | 严蔚敏 | 206 | 65.0 | | 李伟 | 101 | 65.0 | | 李明 | 102 | 64.0 | | 刘敏 | 101 | 63.0 | | 王元 | 101 | 62.0 | | 王金华 | 101 | 61.0 | | 李天飞 | 206 | 60.0 | +----------------+--------+------+ 28 rows in set, 1 warning (0.00 sec)
在增删改句子中使用子查询
- insert语句中使用子查询
mysql> create table rom414 like xs; Query OK, 0 rows affected (0.03 sec) mysql> insert into rom414 select * from xs limit 20,4; Query OK, 4 rows affected (0.01 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> select * from rom414; +--------+--------+--------+------+------------+--------+------+ | 学号 | 姓名 | 专业名 | 性别 | 出生日期 | 总学分 | 备注 | +--------+--------+--------+------+------------+--------+------+ | 200308 | 郑明鑫 | NULL | 男 | 2003-04-05 | NULL | NULL | | 200326 | 唐辉阳 | NULL | 男 | 2003-02-06 | NULL | NULL | | 200327 | 徐斌 | NULL | 男 | 2003-03-05 | NULL | NULL | | 200336 | 李昌城 | NULL | 男 | 2003-06-03 | NULL | NULL | +--------+--------+--------+------+------------+--------+------+ 4 rows in set (0.00 sec)
- update语句中使用子查询
#在成绩表中把学C语言的学生成绩全部加5 mysql> update cj set 成绩=成绩+5 where 课程号 = (select 课程号 from kc where 课程名 = 'c语言'); Query OK, 10 rows affected (0.01 sec) Rows matched: 10 Changed: 10 Warnings: 0 #根据生日求年龄并写入到表格 update 信息管理学生表 set 年龄 = year(now())-year(出生日期);
- 在delete语句中使用子查询
#在成绩表中删除张飞c语言的成绩 mysql> delete from cj where 学号 = (select 学号 from xs where 姓名='张飞') && 课程号 = (select 课程号 from kc where 课程名 = 'c语言'); Query OK, 1 row affected, 1 warning (0.01 sec)
排序
#查询kc表,以学分为升序排序 mysql> select * from kc order by 学分 asc; //默认是升序 +--------+--------------+----------+------+ | 课程号 | 课程名 | 开课学期 | 学分 | +--------+--------------+----------+------+ | 302 | 软件工程 | 7 | 2 | | 101 | 计算机基础 | 1 | 3 | | 102 | c语言 | 1 | 3 | | 206 | 高等数学 | 3 | 3 | | 209 | 操作系统 | 6 | 3 | | 210 | 计算机组装 | 4 | 4 | | 301 | 计算机网络 | 1 | 4 | | 212 | ORACLE数据库 | 2 | 5 | | 208 | 数据结构 | 5 | 6 | +--------+--------------+----------+------+ 9 rows in set (0.00 sec) #查询kc表,以学分为降序排序 mysql> select * from kc order by 学分 desc; +--------+--------------+----------+------+ | 课程号 | 课程名 | 开课学期 | 学分 | +--------+--------------+----------+------+ | 208 | 数据结构 | 5 | 6 | | 212 | ORACLE数据库 | 2 | 5 | | 210 | 计算机组装 | 4 | 4 | | 301 | 计算机网络 | 1 | 4 | | 101 | 计算机基础 | 1 | 3 | | 102 | c语言 | 1 | 3 | | 206 | 高等数学 | 3 | 3 | | 209 | 操作系统 | 6 | 3 | | 302 | 软件工程 | 7 | 2 | +--------+--------------+----------+------+ 9 rows in set (0.00 sec) #多个字段排序 要求查询课程名和学分,学分按升序排序,如果学分相同,就按课程名以升序排序 mysql> select 课程名,学分 from kc order by 学分,课程名; +--------------+------+ | 课程名 | 学分 | +--------------+------+ | 软件工程 | 2 | | c语言 | 3 | | 操作系统 | 3 | | 计算机基础 | 3 | | 高等数学 | 3 | | 计算机组装 | 4 | | 计算机网络 | 4 | | ORACLE数据库 | 5 | | 数据结构 | 6 | +--------------+------+ 9 rows in set (0.00 sec) mysql> select 课程名,学分 from kc order by 2;//这里的2表示第二列,不建议这样写 +--------------+------+ | 课程名 | 学分 | +--------------+------+ | 软件工程 | 2 | | 计算机基础 | 3 | | c语言 | 3 | | 高等数学 | 3 | | 操作系统 | 3 | | 计算机组装 | 4 | | 计算机网络 | 4 | | ORACLE数据库 | 5 | | 数据结构 | 6 | +--------------+------+ 9 rows in set (0.00 sec) #找出学分在3到5之间的数据按学分降序进行排列 mysql> select * from kc where 学分 between 3 and 5 order by 学分 desc; +--------+--------------+----------+------+ | 课程号 | 课程名 | 开课学期 | 学分 | +--------+--------------+----------+------+ | 212 | ORACLE数据库 | 2 | 5 | | 210 | 计算机组装 | 4 | 4 | | 301 | 计算机网络 | 1 | 4 | | 101 | 计算机基础 | 1 | 3 | | 102 | c语言 | 1 | 3 | | 206 | 高等数学 | 3 | 3 | | 209 | 操作系统 | 6 | 3 | +--------+--------------+----------+------+ 7 rows in set (0.00 sec)
显示当前使用数据库
mysql> select database(); +------------+ | database() | +------------+ | cjgl1 | +------------+ 1 row in set (0.00 sec)
语句执行顺序:
第一步:from
第二步:where
第三步:group by
第四步:select
第五步:order by(排序总是最后执行)
desc 表名
#不查看表中的数据,只查看结构 mysql> desc kc; +----------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+------------------+------+-----+---------+-------+ | 课程号 | char(3) | NO | PRI | NULL | | | 课程名 | varchar(20) | NO | UNI | NULL | | | 开课学期 | tinyint unsigned | NO | | 1 | | | 学分 | tinyint unsigned | YES | | NULL | | +----------+------------------+------+-----+---------+-------+ 4 rows in set (0.01 sec)