设为首页 加入收藏

TOP

SQL语言中的基本操作(二)
2017-04-14 10:23:26 】 浏览:545
Tags:SQL 言中 基本操作
必须与被加入的列的排列位置相对应。
字符和日期型数据应包含在单引号中。
插入空值:不指定或insert into table values (null)


例如:插入一条中文记录
insert into employee(id,name,job,salary) values(1,’小明’,’医生’,1500);
出错了:
ERROR 1366 (HY000): Incorrect string value: ‘\xC3\xF7’ for column ‘name’ at row 1 ;
错误原因:mysql client 采用默认字符集编码 gbk
此时,查看系统所有字符集:show variables like ‘character%’;
解决办法:修改客户端字符集为gbk
第一种:当前窗口临时修改 set names gbk ;只对当前窗口有效,关闭后就会失效
第二种:配置mysql/my.ini 文件
[mysql] 客户端配置:修改客户端字符集 [mysql] 后字符集 default-character-set=gbk
[mysqld] 服务器端配置


MySQL中共有6个地方字符集 :client connetion result是和客户端相关 、database server system是和服务器端相关:
client是客户端使用的字符集。
connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。
database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
server是服务器安装时指定的默认字符集设定。
system是数据库系统使用的字符集设定(utf-8不可修改)


(2)Update语句:使用 update语句修改表中数据。语法如下:
UPDATE tbl_name
SET col_name1=expr1 [, col_name2=expr2 …]
[WHERE where_definition]
注意点:
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。


(3)Delete语句:使用 delete语句删除表中数据,语法如下:
delete from tbl_name
[WHERE where_definition]
注意点:
如果不使用where子句,将删除表中所有数据。
Delete语句不能删除某一列的值(可使用update)
使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。


(4)Select语句:基本语法如下:
SELECT [DISTINCT] *|{column1, column2. column3..}
FROM table;


其中:
select 指定查询哪些列的数据。
column指定列名。
*号代表查询所有列。
from指定查询哪张表。
DISTINCT可选,指显示结果时,是否剔除重复数据
注意点:
(1)在select语句中可使用表达式对查询的列进行运算
SELECT *|{column1|expression, column2|expression,..}
FROM table;
(2)在select语句中可使用as语句
SELECT column as 别名 from 表名;
(3)使用where子句,进行过滤查询
在where子句中经常使用的运算符:


这里写图片描述
Like语句中,% 代表零个或多个任意字符,_ 代表一个字符。
举一些小例子:
查询英语分数在 90-100之间的同学:select * from exam where english>=90 and english <= 100; 或者:select * from exam where english between 90 and 100;
查询数学分数为65,75,85的同学:select * from exam where math in(65,75,85);
查询所有姓赵的学生成绩:select * from exam where name like ‘赵%’;
查询英语分>80,语文分>80的同学:select * from exam where english > 80 and chinese > 80;
查询语文没有成绩学生:select * from exam where chinese is null;
查询语文有成绩学生:select * from exam where chinese is not null;
(4)使用order by 子句排序查询结果。
SELECT column1, column2. column3..
FROM table;
order by column asc|desc
其中:
Order by 指定排序的列,排序的列即既可以是表中的列名,也可以是select 语句后指定的列名;
Asc 升序、Desc 降序;
ORDER BY 子句应位于SELECT语句的结尾。
(5)聚集函数-count:Count(列名)返回某一列,行的总数
Select count(*)|count(列名) from tablename
[WHERE where_definition]


例如:
统计一个班级共有多少学生?:select count(*) from exam;
统计英语成绩大于90的学生有多少个?:select count(*) from exam where english > 90;
统计总分大于220的人数有多少?:select count(*) from exam where chinese+math+english > 220;
(6)聚集函数-SUM:Sum函数返回满足where条件的列的和(忽略NULL),sum仅对数值起作用,否则会报错。对多列求和时“,”号不能少。
Select sum(列名){,sum(列名)…} from tablename
[WHERE where_definition]
例如:
sum 统计某一列数据的和:select sum(列名) from 表名;
统计一个班级数学总成绩?:select sum(math) from exam;
统计一个班级语文、英语、数学各科的总成绩:select sum(chinese),sum(math),sum(english) from exam;
统计一个班级语文、英语、数学的成绩总和 select sum(chinese+math+english) from exam; 或者:select sum(chinese)+sum(math)+sum(english) from exam;
若有一个同学小明的语文null ,null进行所有运算,结果都是null:
select sum(chinese)+sum(math)+sum(english) from exam; 含有小明英语和数学成绩
select sum(chinese+math+english) from exam; 不含小明英语和数学成绩


使用ifnull函数处理null情况 :ifnull(xxx,0) 如果为null,则值是0
select sum(ifnull(chinese,0)+ifnull(math,0)+ifnull(english,0)) from exam; 含有小明英语和数学成绩
统计一个班级语文成绩平均分:select sum(chinese)/count(*) fro

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Oracle 10g 数据库与客户端冲突导.. 下一篇MySQL中的多表设计

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目