【济南校区】java基础-MySql
SQL的概述:什么是SQL:SQL:结构化的查询语言. SQL分类:DDL:数据定义语言 * create,alter,drop... DML:数据操纵语言 * update,insert,delete DCL:数据控制语言 * grant,if.. DQL:数据查询语言 * select SQL的特点:非过程性语言:一条语句就会有一个运行的结果. 使用SQL使用SQL操作数据库(对数据库的CRUD的操作)【创建数据库】 语法: * create database 数据库名称 [character set 字符集 collate 字符集校对]; 练习: * 创建db1; * create database db1; * 创建一个带有字符集的数据库db2; * create database db2 character set gbk; * 创建一个带有字符集和校对规则的数据库db3; * create database db3 character set utf8 collate utf8_bin; 【查看数据库】 语法: * 查看数据库服务器中所有的数据库: * show databases; * 查看某个数据库的定义信息. * show create database 数据库名; * 查看当前正在使用的数据库信息. * select database(); 【删除数据库】 语法: * 删除数据库: * drop database 数据库名; 【修改数据库】 语法: * 修改数据库修改的是的数据库的字符集和校对规则. * alter database 数据库名 character set 新字符集 collate 校对规则; 【切换数据库】 语法: * use 数据库名称; 使用SQL操作数据库中的表(对数据库的表CRUD的操作)【创建表】 Ø 语法: * create table 表名 ( 字段名 类型(长度) 约束, 字段名 类型(长度) 约束, 字段名 类型(长度) 约束 ); Ø 数据类型: * Java类型: MySQL: byte/short/int/long tinyint/smallint/int/bigint String char/varchar * 区别?char是固定长度的字符串,varchar可变长度的字符串. * char(8) 和 varchar(8) * 如果插入一个字符串hello 插入到char 那么 插入hello .插入到varchar中 插入hello float float double double boolean bit Date date/time/datetime/timestamp * datetime和timestamp都是既有日期又有时间的日期类型 * 区别? datetime需要使用外部传入的日期.如果没传这个值就是Null. timestamp会使用系统当前的时间作为这个值的默认值. 文本文件 Text 二级制文件 BLOB ***** Oralce使用CLOB/BLOB ***** MYSQL中除了字符串类型需要设置长度其他的类型都有默认长度. Ø 约束: 单表约束: * 主键约束:primary key (默认就是唯一非空的) * 唯一约束:unique * 非空约束:not null Ø 创建一个表: Ø ***** 创建表之前先选择数据库:use 某个数据库; create table employee( eid int primary key auto_increment, ename varchar(20) not null, email varchar(30) unique, birthday date, job varchar(20), resume text ); 【表的查看】 Ø 查看数据库中有哪些表: * show tables; Ø 查看表结构: * desc 表名; 【表的删除】 Ø 表的删除: * drop table 表名; 【表的修改】 Ø 修改表添加列: * alter table 表名 add 列名 类型(长度) 约束; * alter table employee add image varchar(50); Ø 修改表删除列: * alter table 表名 drop 列名; * alter table employee drop job; Ø 修改表的列的类型长度及约束: * alter table 表名 modify 列名 类型(长度) 约束; * alter table employee modify image varchar(80) not null; Ø 修改表的列名 * alter table 表名 change 旧列名 新列名 类型(长度) 约束; * alter table employee change image eimage varchar(60); Ø 修改表名 * rename table 旧表名 to 新表名; * rename table employee to user; Ø 修改表的字符集: * alter table 表名character set 字符集; * alter table user character set gbk; 使用SQL操作数据库中的表的记录(对表的记录的CRUD的操作)【插入记录】 Ø 语法 * insert into 表名 (列名,列名,...) values (值1,值2,...);---插入指定列的值 * insert into 表名 values (值1,值2,...);---插入所有列的值 Ø 注意事项: * 列名的个数与值的个数对应. * 列的类型与值的类型对应.位置也要对应. * 列的类型如果是字符串或者日期,写值的时候使用单引号将值引起来. * 插入的值的最大长度不能超过列的最大长度. Ø 插入记录: * 插入某几列的值: * 插入所有列的值: * insert into employee values (null,'bbb','bbb@itcast.cn','1990-09-01','HR','I am HR'); Ø 插入中文: insert into employee (eid,ename,email) values (null,'张三','aaa@163.cn'); ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'ename' at row 1 **** 重新加载mysql的配置文件: * services.msc * 停止mysql的服务,重新启动mysql服务. * 执行之前的SQL语句. 【修改记录】 Ø 语法: * update 表 set 列名=值,列名=值 [where 条件]; Ø 注意事项: * 列名和值类型也要一致. * 值不能超过列的最大长度. * 值是字符串或日期,需要使用单引号. Ø 练习: * 修改employee表中所有记录的job为WORKER * update employee set job='WORKER'; * update employee set email = 'aaa@163.com' where ename = 'aaa'; * update employee set email = 'bbb@163.com' , job='HR' where ename='bbb'; 【删除记录】 Ø 语法: * delete from 表 [where 条件]; Ø 注意事项: * 删除表中的一行记录,不能删除某列值 * 如果没有条件删除表中的所有列. Ø 练习: * 删除id为8的记录: * delete from employee where eid = 8; * 删除所有记录: * delete from employee; Ø 删除表中的所有记录truncate table 表名 和 delete from 表 区别? * 区别: * truncate table 删除表的记录:将整个表删除掉,重新创建一个新的表.truncate属于DDL. * delete from 删除表的记录:一条一条进行删除. delete属于DML。 * 事务管理 只能作用在DML语句上.如果再一个事务中使用delete删除所有记录,可以找回. 【基本查询】 Ø 查询语句: * select [distinct] *|列名 from 表 [where 条件]; Ø 准备: create table exam( id int primary key auto_increment, name varchar(20), english int, chinese int, math int ); insert into exam values (null,'张三',85,74,91); insert into exam values (null,'李四',95,90,83); insert into exam values (null,'王五',85,84,59); insert into exam values (null,'赵六',75,79,76); insert into exam values (null,'田七',69,63,98); insert into exam values (null,'李四',89,90,83); Ø 查询所有记录: * select * from exam; Ø 查询这个班级人的姓名和英语成绩: * select name,english from exam; Ø 查询英语成绩,将重复英语成绩去掉: * select distinct english from exam; Ø 查询李四的学生成绩: select * from exam where name='李四'; Ø 查询名称叫李四并且英语成绩大于90的 select * from exam where name='李四' and english >90; Ø 将成绩+10分进行显示: select name ,english+10,chinese+10 ,math+10 from exam; Ø 显示这个人的名称和对应总成绩的分数: select name,english+chinese+math from exam; Ø 使用as起别名,as可以省略. select name , english+chinese+math as sum from exam; 【条件查询】 Ø where语句后面可以加: 条件的关键字: = , > , >= , <, <= , <> like中可以使用占位符: _ 和 % :下划线匹配一个字符, %:可以匹配任意多个字符. * like ‘张%’; like ‘张_’; like ‘%明’; like ‘%明%’; in 后跟着一组值. * id in (1,2,3) and or not 【排序查询】 Ø order by 对数据进行排序.默认升序. (asc升序,desc降序) * 查询所有学生的信息,并且按语文成绩进行排序. * select * from exam order by chinese; * 查询所有学生的信息,并且按语文成绩进行降序排序. * select * from exam order by chinese desc; * 查询学生的信息,按照英语成绩降序排序,如果英语成绩相同,按照语文降序. * select * from exam order by english desc, chinese desc; * 查询姓李的学生的信息,同时按照英语升序排序. * select * from exam where name like '李%' order by english asc; 【聚合函数】 Ø sum() Ø count() Ø max() Ø min() Ø avg() * 查询每个学生总成绩: * select name,(english+chinese+math) from exam; * 统计所有学生的总分: * select sum(english+chinese+math) from exam; -- ifnull(english,0) * select sum(english)+sum(chinese)+sum(math) from exam; * 统计学生的个数: * select count(*) from exam; * 统计英语成绩的最高分: * select max(english) from exam; * 统计语文成绩的最低分: * select min(chinese) from exam; * 统计英语成绩平均分: * select avg(english) from exam; 【分组】 Ø group by 创建一个订单详情的表: * 统计订单中的每类商品所购买的个数: * SELECT product,COUNT(*) FROM orderitem GROUP BY product; * 统计订单中的每类商品所花的金额: * SELECT product,SUM(price) FROM orderitem GROUP BY product; * 统计订单中的每类商品所花总金额大于2000信息. * SELECT product,SUM(price) FROM orderitem GROUP BY product HAVING SUM(price) > 2000; * 统计订单中名称有电子的商品并且所花金额大于1500同时按照价格降序排序: * SELECT product,SUM(price) FROM orderitem WHERE product LIKE '电%' GROUP BY product HAVING SUM(price) > 1500 ORDER BY SUM(price) DESC; 【SQL的查询语句的总结】 顺序: s...f...w...g...h...o...;
如果你想了解更多黑马课程,如果你想加入黑马这个大家庭学习先进技术,光交天下好友,那就快来吧!
黑马程序员济南中心联系电话:0531-55696830
|