sql语句操作
1.1 SQL语句
1.1.1 什么是SQL
SQL:Structured Query Language, 结构化查询语言.
特点:
* 非过程性语言:
* 过程性语言特点:一个语句需要依赖上面的几条语句的执行.
if(flag){
System.out.println(“Hello”);
}
* 非过程性语言:一条语句一个执行结果.
* 各个厂商提供对SQL的增强:
* Oracle 提供 PL/SQL.
* SQL Server 提供 TSQL.
* 具有查询、操纵、定义和控制关系型数据库的四方面功能
1.1.2 SQL的分类
DDL:数据定义语言
* create 、show、alter...
DCL:数据控制语言
* if、grant...
DML:数据操纵语言
* update、delete、insert
DQL:数据查询语言
* select
1.1.3 使用SQL:
对数据库进行操纵(对数据库进行CRUD.)
1.创建数据库
创建数据库:
语法:
* create database 数据库名称;
* create database 数据库名称 character set 字符集;
* create database 数据库名称 character set 字符集 collate 字符集校对规则;
* 字符集校对规则:
练习:
创建一个名称为mydb1的数据库。
* create database mydb1;
创建一个使用utf8字符集的mydb2数据库。
* create database mydb2 character set utf8;
创建一个使用utf8字符集,并带校对规则的mydb3数据库。
* create database mydb3 character set utf8 collate utf8_bin;
2.查看数据库
查看数据库:
语法:
查看数据库服务器中的所有数据库:show databases;
查看某一个数据库的定义的信息:show create database 数据库名称;
练习:
查看当前数据库服务器中的所有数据库
* show databases;
查看前面创建的mydb2数据库的定义信息
* show create database mydb2;
3.删除数据库
删除数据库:
语法:
* drop database 数据库名称;
练习:
删除前面创建的mydb1数据库
* drop database mydb1;
4.修改数据库
修改数据库:(修改数据库的字符集和校对规则)
语法:
* alter database 数据库名称 character set 字符集 collate 校对规则;
练习:
查看服务器中的数据库,并把其中某一个库的字符集修改为gbk;
* alter database mydb2 character set gbk;
5.数据库其他操作
切换数据库:
* use 数据库名称
查看当前正在使用的数据库:
* selete database();
**** 对数据库的操作的语句属于DDL.---------------------------------------------------
对数据库表进行操纵(对表进行CRUD)
1.创建表
创建表:一般情况下,一个Java类对应一个表.
* 语法:
* create table 表名(
字段名 字段类型(长度) 约束,
字段名 字段类型(长度) 约束,
字段名 字段类型(长度) 约束
);
* Java中类:
class User{
int id;
String name;
...
}
* MySQL常用的数据类型:
字符串型
VARCHAR、CHAR
* varchar类型和char类型有什么区别?
* char类型:固定长度的字符串.数据库中设置char(8).存入一个字符串hello.在hello字符串后面使用三个空格补全.
* varchar类型:可变长度的字符串.数据库中设置varchar(8).存入一个字符串hello.直接存的是hello.
大数据类型
BLOB、TEXT
* 向数据库中存文件.(一般不使用.)
* BLOB:存的是二进制文件如.jpg、.mp3...
* TEXT:存的是.txt文本文档.
***** Oracle中没有Text类型. CLOB、BLOB
数值型
TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
* tinyint :byte
* smallint :short
* int :int
* bigint :long
* float :float
* double :double
逻辑性
BIT
* bit :boolean
日期型
DATE、TIME、DATETIME、TIMESTAMP
* java中java.utils.Date.
* date:是只有日期的格式.
* time:是只有时间的格式.
* datetime和timestamp类型都是既有日期又有时间
* datetime和timestamp的区别?
* datetime:如果传入的数据是null,那么数据库就是一个null值.
* timestamp:如果传入的数据时null,将系统的当前时间存入该字段.
练习:
创建一个员工表employee
* 语句:
* create table employee(
id int,
name varchar(20),
gender varchar(10),
birthday date,
entry_date date,
job varchar(50),
salary double,
resume text
);
***** 建表的时候有的字段写了长度,有的没写?因为除了字符串类型之外的其他数据类型都有默认长度.
int默认11
***** 在创建表的时候要先选择数据库!!!
use 数据库;
创建表.
create database day15;
use day15;
2.查看表
语法:
* 查看表结构:
* desc 表名;
* 查看数据库中所有表:
* show tables;
单表约束:
主键约束:primary key利用主键唯一确定一条记录.主键约束默认就是唯一非空.如果主键是整形数.可以采用auto_increment.自动增长.
唯一约束:unique.唯一就是字段中不可以出现重复的值.
非空约束:not null.字段不可以为空
***** 约束主要用来保证数据的完整性
* 练习:
* 创建一个带有约束的表employee2.
create table employee2(
id int primary key auto_increment,
name varchar(20) unique not null,
gender varchar(10) not null,
birthday date not null,
entry_date date not null,
job varchar(50) not null,
salary double not null,
resume text not null
);
3.删除表
删除表:
语法:
* drop table 表名;
练习:
* drop table employee2;
4.修改表:
修改表:
语法:
* alter table 表名 add 字段名 类型(长度) 约束; ---修改表添加列.
* alter table 表名 modify 字段名 类型(长度) 约束; ---修改表修改列类型长度和约束.
* alter table 表名 change 旧列名 新列名 类型(长度) 约束; ---修改表修改列名.
* alter table 表名 drop 列名; ---修改表 删除列
* rename table 旧表名 to 新表名; ---修改表名
* alter table 表名 character set 字符集; ---修改表字符集
练习:
在上面员工表的基本上增加一个image列。
* alter table employee add image varchar(20);
修改job列,使其长度为60。
* alter table employee modify job varchar(60);
删除gender列。
* alter table employee drop gender;
表名改为user
* rename table employee to user;
修改表的字符集为utf8
* alter table user character set utf8;
列名name修改为username
* alter table user change name username varchar(30);
***** 对表的操作:属于DDL--------------------------------------------------
对数据库表记录进行操纵(对表记录CRUD)
1.插入记录
插入记录:
* 语法:
* insert into 表名 (字段名1,字段名2,字段名3...) values (值1,值2,值3...);
* insert into 表名 values (值1,值2,值3...);
* 注意:
* 插入的字段的类型与值的类型相同.
* 类型是字符串或者是日期类型,值的地方要使用单引号’’;
* 在values中列出的数据位置必须与被加入的列的排列位置相对应。
* 插入的值的长度不能超过字段的最大长度
* 插入3条记录
* insert into employee (id,name,gender) values (1,'aaa','man');
* insert into employee values (2,'bbb','man','1990-01-05','2013-09-12','HR',4500,null);
* insert into employee values (3,'张三','男','1990-01-05','2013-09-12','HR',4500,null);
* 插入第三条记录的时候 报错:中文 ‘张三’报错!
* show variables like 'character%';
* 查看与character相关的参数有6个.(3个与客户端相关的参数,3个与服务器相关参数)
* 解决mysql在cmd窗口中的乱码问题:
* 打开mysql/my.ini文件
[client]
将[client]下面的字符集改为gbk
default-character-set=gbk
* 重启mysql的服务.
2.修改记录
修改记录:
* 语法:
* update 表名 set 字段名=值,字段=值,字段=值 [where 条件];
* 练习:
将所有员工薪水修改为5000元。
* update employee set salary = 5000;
将姓名为’张三’的员工薪水修改为3000元。
* update employee set salary = 3000 where name = '张三';
将姓名为’bbb’的员工薪水修改为4000元,job改为WORKER。
* update employee set salary = 4000,job='WORKER' where name = 'bbb';
将aaa的薪水在原有基础上增加1000元。
* update employee set salary = salary + 1000 where name='aaa';
3.删除记录
删除记录:
* 语法:
* delete from 表 [where 条件];
* 注意事项:
* 如果不使用where子句,将删除表中所有数据。
* delete语句不能删除某一列的值(可使用update)
* 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
* 多表操作:外键约束.删除带有关联关系这种表,容易报错!
* 删除一条记录:
* delete from employee where id = 1;
* 面试:
* delete from 表; 和 truncate table 表名; 这两种都可以删除表中的所有记录!区别是什么?
* truncate table 删除表中的所有记录,将这个表删除掉,创建一个新表!
* delete from 表;删除表中的所有记录,一条一条删除!
* 但是事务作用在DML语句上.
* 事务:一组操作要么全都成功要么全都失败!
* delete的删除如果在事务中,可以被找回来.
* truncate删除的数据就找不回来
4.查询记录
查询记录:
* 语法一:
* select distinct [列名,列名] * from 表;
* 建表:
create table exam(
id int primary key auto_increment,
name varchar(20),
math int,
chinese int,
english int
);
insert into exam values (null,'苍老师',67,82,92);
insert into exam values (null,'石老师',72,61,83);
insert into exam values (null,'刘老师',81,73,64);
insert into exam values (null,'边老师',92,61,73);
* 练习:
查询表中所有学生的信息。
* select * from exam;
查询表中所有学生的姓名和对应的英语成绩。
* select name,english from exam;
过滤表中重复数据。
* select distinct chinese from exam;
* 语法二:
* select 列名 as 别名 from 表; ---- as可以省略的.
* 练习
在所有学生分数上加10分特长分。
* select name ,math+10,english + 10,chinese+10 from exam;
统计每个学生的总分。
* select name,(math+english+chinese) from exam;
使用别名表示学生分数。
* select name,(math+english+chinese) as sum from exam;
* select name,(math+english+chinese) sum from exam;
以下sql的语法都是正确的:
* select math,chinese from exam;
* select math chinese from exam;
* 语法三:
* select 列名|* from 表 where 条件;
* 练习:
查询姓名为苍老师的学生成绩
* select * from exam where name = '苍老师';
查询英语成绩大于80分的同学
* select * from exam where english > 80;
查询总分大于220分的所有同学
* select * from exam where (math+chinese+english)>220;
* select name,(math+english+chinese) sum from exam where (math+english+chinese)> 220;
* where子句中使用的运算符:
* > < >= <= = <> :
* in :从多个值中获得数据
* 语法:where id in (1,2);
* like :模糊查询.查询姓张的同学.
* 语法:like中使用占位符:可以使 _ 或者 % _代表一个字符. %代表多个字符.
* where name like ‘张_’;
* where name like ‘张%’;
* where name like ‘%张%’;
* is null 、 is not null
* 语法:
* where name is null;
* where name is not null;
* and
* or
* not
* 练习:
查询英语分数在 80-90之间的同学。
* select * from exam where english > 80 and english <90;
* select * from exam where english between 80 and 90;
查询数学分数为67,72,81的同学。
* select * from exam where math in (67,72,81);
查询所有姓苍的学生成绩。
* select * from exam where name like '苍%';
查询数学分>80,语文分>70的同学。
* select * from exam where math > 80 and chinese > 70;
* 语法四:
* 语法:
* select * from 表 where 条件 order by 字段名 asc/desc;
* 注意:
Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。
Asc 升序、Desc 降序
ORDER BY 子句应位于SELECT语句的结尾。
* 练习:
对英语成绩排序后输出。
* select * from exam order by english;
对总分排序按从高到低的顺序输出
* select name,(math+english+chinese) from exam order by (math+english+chinese) desc;
对学生成绩按照语文进行降序排序,语文相同学员按照数学降序
* select * from exam order by chinese desc,math desc;
对姓苍的学生成绩排序输出
* select name,(math+chinese+english) from exam where name like '苍%' order by (math+chinese+english);
* 语法五:聚集函数
* count() :统计个数.
* 语法:
* select count(*|列名) from 表名;
* 练习:
统计一个班级共有多少学生?
* select count(*) from exam;
统计数学成绩大于80的学生有多少个?
* select count(*) from exam where math > 80;
统计总分大于220的人数有多少?
* select count(*) from exam where (math+chinese+english)>220;
* sum() :求和
* 语法:
* select sum(字段) from 表名;
* 练习:
统计一个班级数学总成绩?
* select sum(math) from exam;
统计一个班级语文、英语、数学各科的总成绩
* select sum(chinese),sum(english),sum(math) from exam;
统计一个班级语文、英语、数学的成绩总和
* select sum(chinese+english+math) from exam;
* chinese+english+math:null+某个值 = null
* select sum(chinese)+sum(english)+sum(math) from exam;
* select sum(chinese+english+ifnull(math,0)) from exam;
统计一个班级语文成绩平均分
* select sum(chinese)/count(*) from exam;
* max() :求最大值
* min() :求最小值
* 练习:求班级的语文最高分和数学的最低分.
* select max(chinese),min(math) from exam;
* avg() :求平均值
* 练习
求一个班级语文平均分?
* select avg(chinese) from exam;
求一个班级总分平均分
* select avg(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam;
* 语法六:分组统计.group by 字段
创建表:
create table orders(
id int,
product varchar(20),
price float
);
insert into orders(id,product,price) values(1,'电视',900);
insert into orders(id,product,price) values(2,'洗衣机',100);
insert into orders(id,product,price) values(3,'空调',2000);
insert into orders(id,product,price) values(4,'手电筒',50);
insert into orders(id,product,price) values(6,'手电筒',50);
insert into orders(id,product,price) values(5,'空调',2000);
练习:
* 对订单表中商品归类后,显示每一类商品的总价
* select product,sum(price) from orders group by product;
* 对订单表中商品归类后,显示每一类商品的总个数
* select product,count(*) from orders group by product;
* 查询购买了几类商品,并且每类总价大于500的商品
* 错误的:where条件后不能使用聚集函数.
* select product,sum(price) from orders where sum(price)>500 group by product;
* 正确的写法:having.对分组后的数据进行条件过滤 having后可以使用聚集函数.
* select product,sum(price) from orders group by product having sum(price)>500;
总结Select语句
S...F...W...G...H...O...
顺序不能变.
sql语句操作的更多相关文章
- SQL语句操作大全
SQL语句操作大全 本文分为以下六个部分: 基础部分 提升部分 技巧部分 数据开发–经典部分 SQL Server基本函数部分 常识部分 一.基础 1.说明:创建数据库CREATE DATABAS ...
- Shell脚本中执行sql语句操作mysql的5种方法【转】
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
- Django中使用mysql数据库并使用原生sql语句操作
Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件mysql数据库,版本5.7 ...
- 在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作
在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作 MyEclipse6.5 , mysq驱动jar包为mysql-connector ...
- SQL语句操作全集
SQL语句操作全集 下列语句部分是MySQL语句 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDAT ...
- 【MySQL】使用SQL语句操作MySQL
前言: MySQL在工作中是最常用的数据库,但在使用Django和Flask的时候,都是使用ORM进行操作,除了select语句外,其他的SQL语句操作MySQL的能力没有啥提高,为了解决这个问题, ...
- Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库
下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...
- 043:Django使用原生SQL语句操作数据库
Django使用原生SQL语句操作数据库 Django配置连接数据库: 在操作数据库之前,首先先要连接数据库.这里我们以配置 MySQL 为例来讲解. Django 连接数据库,不需要单独的创建一个连 ...
- Shell脚本中执行sql语句操作mysql
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
随机推荐
- javascript Date 总结
构造函数 Date 对象的构造函数有以下4种: (1)var variable = new Date(); (2)var variable = new Date(millisenconds); (3) ...
- memcached的最佳实践方案(转)
基本问题 1.memcached的基本设置 1)启动Memcache的服务器端 # /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 ...
- eclipse将引用了第三方jar包的java项目打成jar包
今天用java开发了一个项目,想要打成jar包,并在linux环境下运行.但是运行时引用的第三方jar包却显示classNotFind错误. 于是查了一下解决办法,在此贴出来,方便以后查阅. 用Ecl ...
- html 等页面防止中文出现乱码的终极解决方案
网页UTF-8中文乱码问题解决方法 网页UTF-8中文乱码问题解决方法只有经过多方面测试的东西才有质量的保证和说服力,之前一直都是在本地做开发,经过本地测试也是通过的,但一发布到远程服务器上就问题百出 ...
- 梳理javascript原型整体思路
相信很多对javascript原型初步了解的人都知道prototype,constructor,__proto__这些名词,也在一定程度上可以使用这些对象.属性.甚至知道在构造函数的原型上定义方法供实 ...
- U盘操作系统,Kali Linux操作系统安装
为什么要用U盘装操作系统,那好处多了去了.1.随身携带,想用就用.2.平常娱乐还是用Windows比较方便,不用做双系统那么麻烦. 准备: U盘,从天猫上买了个三星闪存盘,32G,USB3.0: 从官 ...
- SQLServer安装错误之--->无法打开项 UNKNOWN\Components\DA42BC89BF25F5BD0AF18C3B9B1A1EE8\c1c4f01781cc94c4c8fb1542c0981a2a
– 错误 1402.无法打开项 UNKNOWN\Components\7ABFE44842C12B390AF18C3B9B1A1EE8\54D21D49F3A8C1C49AC11A1B6445A83E ...
- R-数据导入
目录 键盘输入 导入文本文件 导入Excel文件 访问数据库管理系统 键盘输入 > mydata <- data.frame(age=numeric(0), gender=characte ...
- python下载网页源码 写入文本
import urllib.request,io,os,sysreq=urllib.request.Request("http://echophp.sinaapp.com/uncategor ...
- Javascript高级程序设计——基本类型和引用类型的值
ECMAScript中的变量有两种不同的数据类型的值: 基本类型:基本类型的值是简单的数据段.包括:Undefined.Null.Number.Boolean.String五种 引用类型:引用类型的值 ...