SQL 入门

来源:互联网 发布:aspen plus软件 编辑:程序博客网 时间:2024/05/01 17:03

数据库服务器、数据库和表的关系


         装好mysql,只是装好了一个数据库管理程序,要想通过这个程序保存数据,需要在这个程序下创建多       个库来保存(一般开发人员会针对每一个应用创建一个数据库)。而库又是使用表保存数据的,所以库创  建好后,我们又会在数据库下面创建多个表,以保存程序中不         同实体的数据。

注:以下 [ ]中的内容可写可不写。

 

创建数据库

CREATE  DATABASE [IF NOT EXISTS] db_name   [create_specification[,create_specification] ...]

         [IF NOT EXISTS]:写上后,如果数据库存在就不创建了,不写如果存在就报错。

         reate_specification:库的细节,分为:

                   CHARACTER SET:指定数据库采用的字符集,注:虽然在安装的时候配置了码表,但是这里一定要                                              指定,由于这个库可能还在别的环境下运行。

                   COLLATE:指定数据库字符集的比较方式,排序规则,一般默认。

eg:1、创建一个名称为mydb1的数据库

                  create database mydb1;

                  show databases;  查看创建的库有没有成功

         2、创建一个使用utf-8字符集的mydb2数据库。

                   createdatabase mydb2 character set utf8;    注:是utf8不是utf-8

         3、创建一个使用utf-8字符集,并带校对规则的mydb3数据库。

                   createdatabase mydb3 character set utf8 collate utf8_general_ci;

    4、查看前面创建的mydb2数据库的定义信息

       show create database mydb2;

 

查看、删除数据库

    显示数据库语句:SHOW DATABASES

    显示数据库创建语句:SHOW CREATE DATABASE db_name

    数据库删除语句:DROP DATABASE  [IF EXISTS]  db_name

eg:1、查看所以库

                   showdatabases;  

    2、查看前面创建的mydb1数据库的定义信息

       show create database mydb1;

    3、删除前面创建的mydb1数据库

       drop database mydb1;

 

修改数据库

ALTER  DATABASE [IF NOT EXISTS] db_name [alter_specification [,alter_specification] ...]

         [IF NOT EXISTS]:写上后,如果数据库存在就不创建了,不写如果存在就报错。

         reate_specification:库的细节,分为:

                   CHARACTER SET:指定数据库采用的字符集。

                   COLLATE:指定数据库字符集的比较方式,排序规则,一般默认。

eg:查看服务器中的数据库,并把其中某一个库的字符集修改为gb2312;

    alter database mydb2 character set gb2312;

 

备份数据库

    备份数据库表中的数据(window命令:要启动命令行指定,不在mysqL中执行

    mysqldump -u 用户名 -p数据库名 >文件名.sql

eg:对mydb1作备份操作,启动一个window命令行窗口,执行如下命令

    mysqldump -uroot -p mydb1>c:\ mydb1.sql   注意没有“;”

    >表示数据库进文件

 

恢复数据库

    方式一:Source 文件名.sql

    恢复数据库只能恢复数据,不能恢复库,因此要先创建库。

eg:createdatabase mydb1;

    use mydb1;   首先进到库中

    source c:\ mydb1.sql

    方式二:(window命令)

eg:createdatabase mydb1;

    mysql -uroot -proot mydb1<c:\ mydb1.sql;  <表示文件进数据库

 

 

创建表

CREATE TABLE table_name

(

    field1  datatype,

    field2  datatype,

    field3  datatype

)character set 字符集 collate 校对规则

field:指定列名 datatype:指定列类型

MySQL常用数据类型




eg:创建一个员工表


use mydb2;   首先进入库再创建表

create table employee

(

    id int,

    name varchar(40),

    sex varchar(4),

    birthday date,

    entry_date date,

    job varchar(40),

    salary decimal(8,2),

    resume text

);

 

查看表

show tables;  查看库的所有表

show create table employee;   查看表的创建细节(打出创建代码)

desc employee;     看表结构

 

修改表

使用 ALTER TABLE 语句追加, 修改, 或删除列的语法

追加

ALTER TABLE table ADD column datatype [DEFAULT expr][,column datatype]...);

修改

ALTER TABLE table MODIFY column datatype [DEFAULTexpr][,column datatype]...);

修改表的名称:Renametable 表名 to 新表名

修改表的字符集:alter table student character set 字符集;

修改列名:alter table user change column 原列名 新列名 新列名类型;

删除

ALTER TABLE table DROP(column);

eg:1、在上面员工表的基本上增加一个image列。

    alter table employee add imageblob;

    2、修改job列,使其长度为60。

    alter table employee modify jobvarchar(60);

    3、删除sex列

    alter table employee drop sex;

    4、删除表

    drop table user;

    5、表名改为user。

    rename table employee to user;

    6、修改表的字符集为utf-8

    alter table user character setutf8;

    7、列名name修改为username

    alter table user change columnname username varchar(40);

语句

Insert语句

INSERT INTO   table [(column[, column...])]VALUES(value [, value...]);

注:插入的数据应与字段的数据类型相同。数据的大小应在列的规定范围内,例如:不能将一个长度为80   的字符串加入到长度为40的列中。在values中列出的数据位置必须与被加入的列的排列位置相对应。   字符和日期型数据应包含在单引号中。插入空值,不指定或insert into table value(null)

eg:使用insert语句向表中插入员工的信息。

insert into employee (id,username,birthday,entry_date,job,salary,resume)

values('1','aaa','1980-09-09','1980-09-09','bbb','90','aaaaa');

注:类型建议必须,虽然可以不写,但是为了后期维护要写,值中为了不错,全部加上单引号。

    插入中文数据的乱码问题

    show variables like 'chara%';   导出所有编码

    set character_set_client=gb2312;   把客户端编码表设为gb2312

    insert intoemployee(id,username) values('3','张三');   这样插入张三就行了

    要想查看时不乱码

    setcharacter_set_results=gb2312;   把取出结果的编码表设为gb2312

    select * from employee;   查看就不会乱码了

    注:以上设置只对当前命令行窗口有效,关掉就不行了,可以在mysqL中的my.ini配置文件中改,      但是一定不要改,改了程序就又问题了。

 

Update语句

UPDATE  表名 SET 列名=值 [,多个 ...] [WHERE where_definition] 

eg:1、将所有员工薪水修改为5000元。

    update employee set salary=5000;

    2、将姓名为’bbb’的员工薪水修改为3000元。

    update employee set salary=3000where username='bbb';

    3、将姓名为’bbb的员工薪水修改为4000元,job改为ccc。

    update employee setsalary=4000,job='ccc' where username='bbb';

    4、将bbb的薪水在原有基础上增加1000元。

    update employee set salary=salary+1000where username='bbb';

    注:要修改数据建议先写上where条件,否则就将所有表中的数据全改了。

 

Delete语句

delete from tbl_name [WHERE where_definition]

注:如果不使用where子句,将删除表中所有数据。Delete语句不能删除某一列的值(可使用update 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。同insert和  update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应  该始终不要忘记这个潜在的问题。删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有   所不同,TRUNCATE TABLE语句为摧毁整个表后重建表结构,而delete是一条一条的删。

eg:1、删除表中名称为’zs’的记录。

    delete from employee whereusername='bbb';

    2、删除表中所有记录。

    delete from employee;

    3、使用truncate删除表中记录。

    truncate table employee;

 

Select语句

1 在select语句中可使用表达式对查询的列进行运算

SELECT *|{column1|expression, column2|expression,..} FROM table;

eg:1、查询表中所有学生的信息。

    select * from student;

    2、查询表中所有学生的姓名和对应的英语成绩。

    select name,english fromstudent;

    3、过滤表中重复的英语数据。

    select distinctenglish from student;

    4、在所有学生总分上加10分特长分。

    select name,(chinese+english+math)+10from student;

    5、统计每个学生的总分。

    selectname,(chinese+english+math) from student;

2在select语句中可使用as语句

SELECT column as 别名 from 表名;

eg:1、使用别名表示学生分数。

select name as 姓名,(chinese+english+math)+10as 总分 from student;as可加可不加

    2、查询姓名为wu的学生成绩

    select * from student wherename='王五';

    3、查询英语成绩大于90分的同学

    select * from student whereenglish>'90';

    4、查询总分大于200分的所有同学

    select name from student where(chinese+english+math)>200;

3在where子句中经常使用的运算符


Like语句中,% 代表零个或多个任意字符,_ 代表一个字符

eg:1、查询英语分数在 80-90之间的同学。

    写法一:select name from student where english>80 andenglish<90;

    写法二:select name from student where english between 80 and 90;

    2、查询数学分数为89,90,91的同学。

    select * from student where mathin(89,90,91);

    3、查询所有姓李的学生成绩。

    select * from student where namelike '李%';

    select * from student where namelike '李_';

    4、查询数学分>80,语文分>80的同学。

    select * from student wheremath>80 and chinese>80;

4使用order by 子句排序查询结果。

SELECT column1, column2. column3.. FROM   table order by column asc|desc;

注:Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。Asc    升序、Desc 降序,默认为升序,ORDER BY 子句应位于SELECT语句的结尾。

eg:1、对总分排序后输出,然后再按从高到低的顺序输出

    select name 姓名,(chinese+english+math)总分 from student orderby                                                          (chinese+english+math)desc;

    select name 姓名,(chinese+english+math)总分 from student orderby 总分 desc;

    2、对姓李的学生成绩排序输出

select * from student where name like '李%' order by (chinese+english+math) desc;

合计函数-count

Count(列名)返回某一列,行的总数

Select count(*)|count(列名) from tablename [WHERE where_definition]

eg:1、统计一个班级共有多少学生?

    select count(name) from student;

    select count(*) from student;

    2、统计数学成绩大于90的学生有多少个?

    select count(*) from studentwhere math>80;

    3、统计总分大于250的人数有多少?

    select count(*) from studentwhere (chinese+english+math)>250;

    注:关于 count的函数的细节count只统有值的行)

合计函数-SUM

Sum函数返回满足where条件的行的和

Select sum(列名)[,sum(列名)…] fromtablename [WHERE where_definition]

eg : 1、统计一个班级数学总成绩?

    select sum(math) from student;

    2、统计一个班级语文、英语、数学各科的总成绩

    select sum(chinese),sum(english),sum(math)from student;

    3、统计一个班级语文、英语、数学的成绩总和

    select sum(chinese+english+math)from student;

    4、统计一个班级语文成绩平均分

    select sum(chinese)/count(*)from student;

合计函数-AVG

AVG函数返回满足where条件的一列的平均值

Select sum(列名) from tablename [WHERE where_definition]

eg:1、统计一个班级语文成绩平均分

    select avg(chinese) fromstudent;

    2、求一个班级总分平均分

    select avg(chinese+math+english)from student;

合计函数-MAX/MIN

Max/min函数返回满足where条件的一列的最大/最小值

Select Max/min(列名) from tablename [WHERE where_definition] 

eg:求班级最高分和最低分

    selectmax(chinese+math+english),min(chinese+math+english) from student;

5使用group by 子句对列进行分组

SELECT column1, column2. column3.. FROM   table group by column;

eg:对订单表中商品归类后,显示每一类商品的总价

    select product,sum(price) fromorders group by product;

6使用having 子句过滤

    Having和where均可实现过滤,但在having可以使用合计函数,having通常跟在group by后,   它作用于组。

    SELECT column1, column2.column3.. FROM   tablegroup by column having ... ;

eg:查询购买了几类商品,并且每类总价大于100的商品

    select product from orders groupby product having sum(price)>100;

时间日期相关函数

 

字符串相关函数

 

数学相关函数