A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 薛鹏鹏 高级黑马   /  2013-9-26 21:02  /  2120 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、sql操作数据库
        1.创建数据库
                CREATE  DATABASE  [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]
                create_specification:???
                    [DEFAULT] CHARACTER SET charset_name  |   [DEFAULT] COLLATE collation_name
                ~创建一个名称为mydb1的数据库。
                create database mydb1;
                ~创建一个使用utf8字符集的mydb2数据库。
                create database mydb2 character set utf8;
                ~创建一个使用utf8字符集,并带校对规则的mydb3数据库。
                create database mydb3 character set utf8 collate utf8_bin;
        2.查看数据库
                (1)显示所有数据库语句:SHOW DATABASES
                (2)显示数据库的建库语句:SHOW CREATE DATABASE db_name;
        3.修改数据库
                ALTER  DATABASE  [IF NOT EXISTS] db_name [alter_specification [, alter_specification] ...]
                alter_specification:
                    [DEFAULT] CHARACTER SET charset_name |   [DEFAULT] COLLATE collation_name
               
                ~查看服务器中的数据库,并把其中mydb3的字符集修改为gbk;
                alter database mydb3 character set gbk;
        4.删除数据库
                DROP DATABASE [IF EXISTS]   db_name;
               
                ~查看当前数据库服务器中的所有数据库 show databases;
                ~查看前面创建的mydb2数据库的定义信息show create database mydb2;
                ~删除前面创建的mydb1数据库 drop database mydb1;
        5.选择数据库
                use db_name;
        6.查看当前所选的数据库
                select database();
二、sql操作表
        1.创建表(基本语句)
                CREATE TABLE table_name
                (
                        fi datatype,
                        feld1 ield2  datatype,
                        field3  datatype,
                        ...
                )[character set 字符集][ collate 校对规则]
                field:指定列名 datatype:指定列类型
                ~创建一个员工表employee
                create table employee(
                        id int primary key auto_increment,
                        name varchar(20) unique,
                        gender char(1) not null,
                        birthday date,
                        entry_date date,
                        job varchar(40),
                        salary double,
                        resume text
                );
        2.查看表
                (1)查看结构 desc tab_name;
                (2)查看当前数据库中的所有的表: show tables;
                (3)查看建表语句:show create table tab_name;
        3.修改表:
                ALTER TABLE tab_name ADD/MODIFY/DROP [column]   (column_name datatype [DEFAULT expr]  [, column datatype]...);
                                        /change  [column] old_col_name column_definition;

                修改表的名称:rename table 表名 to 新表名;
                修改表的字符集:alter table student character set utf8;

               
                ~在上面员工表的基本上增加一个image列。
                        alter table employee add column image blob;
                ~修改job列,使其长度为60。
                        alter table employee modify column job varchar(60);
                ~删除gender列。
                        alter table employee drop column gender;
                ~表名改为user。
                        rename table employee to user;
                ~修改表的字符集为utf8
                        alter table user character set utf8;
                ~列名name修改为username
                        alter table user change name username varchar(20);
        4.删除表
                DROP TABLE tab_name;
三、sql操作表记录
        乱码问题:
                根源:由于cmd窗口的客户端,默认使用操作系统编码发送数据,而Mysql服务器在安装的时候指定的是utf-8编码,所有gbk发送的数据服务器用utf-8解析导致乱码
                可以设置set names gbk,通知服务器当前客户端使用的是gbk编码,使数据库服务器使用gbk解析编码
                也可以在my.ini中配置defaultcharacter为gbk,使服务器默认就认为客户端是gbk的。
        1.INSERT
                INSERT INTO tab_name [(column [, column...])] VALUES (value [, value...]);
                ~向员工信息表中增加三条记录
                        insert into employee (id,name,gender,birthday,job,salary,entry_date,resume) values (null,'关羽','m','1990-09-09','武圣',998.00,'1990-10-10','十分能打');
                        insert into employee values (null,'张飞','f','1991-01-02','1992-01-01','打手',88.00,'三弟');
                        insert into employee values (null,'刘备','m','1891-01-01','1991-01-01','CEO',99988.00,'公司大哥,一副很酷的样子'),(null,'赵云','m','2000-01-01','2000-01-01','保镖',88.00,'老大的保镖,负责开车');
        2.UPDATE
                UPDATE         tbl_name  SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
                ~将所有员工薪水修改为5000元。
                        update employee set salary=5000.00;
                ~将姓名为’张飞’的员工薪水修改为3000元。
                        update employee set salary=3000.00 where name='张飞';
                ~将姓名为’赵云’的员工薪水修改为4000元,job改为ccc。
                        update employee set salary=4000.00 , job='ccc' where name='赵云';
                ~将刘备的薪水在原有基础上增加1000元。       
                        update employee set salary=salary+1000 where name='刘备';
        3.DELETE
                delete from tbl_name [WHERE where_definition];
                ~删除表中名称为’张飞’的记录。
                        delete from employee where name='张飞';
                ~删除表中所有记录。
                        delete from employee;
                ~使用truncate删除表中记录。
                        truncate tab_name;
        4.SELECT
                SELECT [DISTINCT] *|{column1, column2. column3..} FROM        table;
        (1)基本查询
                ~查询表中所有学生的信息。
                        select * from exam;
                ~查询表中所有学生的姓名和对应的英语成绩。
                        select name,english from exam;
                ~过滤表中重复数据。
                        select distinct english from exam;
        (2)在查询时使用表达式,起别名               
                ~在所有学生分数上加10分特长分显示。
                        select name ,chinese+10,math+10,english+10 from exam;
                ~统计每个学生的总分。
                        select name,chinese+math+english from exam;
                使用别名表示学生总分。
                        select name as 姓名,chinese+math+english as 总成绩 from exam;
                        select name 姓名,chinese+math+english 总成绩 from exam;
                        !!!!!!!select name english from exam;
        (3)使用where子句,进行过滤查询
                ~查询姓名为张飞的学生成绩
                        select * from exam where name='张飞';
                ~查询英语成绩大于90分的同学
                        select name ,english from exam where english>90;
                ~查询总分大于230分的所有同学
                        select name 姓名,english+math+chinese 总成绩 from exam where english+math+chinese>230;
                ~查询英语分数在 80-100之间的同学。
                        select name ,english from exam where english between 80 and 100;
                ~查询数学分数为75,76,77的同学。
                        select name ,math from exam where math in (75,76,77);
                ~查询所有姓张的学生成绩。
                        select * from exam where name like '张%';
                        select * from exam where name like '张__';
                ~查询数学分>70,语文分>80的同学。
                        select * from exam where math>70 and chinese>80;
               
        (4)使用order by 对查询结果进行排序
                ~对语文成绩排序后输出。
                        select name,chinese from exam order by chinese;
                ~对总分排序按从高到低的顺序输出
                        select name 姓名,math+english+chinese 总成绩 from exam order by 总成绩 desc;
                ~对姓张的学生成绩排序输出
                        select name 姓名 ,math+english+chinese 总成绩 from exam where name like '张%' order by 总成绩 desc;
        (5)使用聚合函数进行查询
                *count()统计符合条件的行数
                        ~统计一个班级共有多少学生?
                                select count(*) from exam;
                        ~统计数学成绩大于70的学生有多少个?
                                select count(*) from exam where math>70;
                        ~统计总分大于230的人数有多少?
                                select count(name) from exam where math+english+chinese>230;
                *sum()求符合条件的某一列的和
                        ~统计一个班级数学总成绩?
                                select sum(math) from exam;
                        ~统计一个班级语文、英语、数学各科的总成绩
                                select sum(math),sum(chinese),sum(english) from exam;
                        ~统计一个班级语文、英语、数学的成绩总和
                                select sum(ifnull(math,0)+ifnull(chinese,0)+ifnull(english,0)) from exam;
                        ~统计一个班级语文成绩平均分
                                select sum(chinese)/count(*) from exam;
                *avg()求符合条件的某一列的平均值
                        ~求一个班级数学平均分?
                                select avg(math) from exam;
                        ~求一个班级总分平均分?
                                select avg(ifnull(math,0)+ifnull(chinese,0)+ifnull(english,0)) from exam;

                *MAX/MIN求符合条件的某一列的最大值最小值
                        ~求班级最高分和最低分(数值范围在统计中特别有用)
                        select max(ifnull(math,0)+ifnull(chinese,0)+ifnull(english,0)) from exam;
                        select min(ifnull(math,0)+ifnull(chinese,0)+ifnull(english,0)) from exam;
        (6)分组查询
                可以使用having 子句 对分组结果进行过滤
                where 子句和 having子句都可以用来进行过滤,但是where子句用来对分组之前的记录进行过滤,having子句对分组之后的记录进行过滤。
                where子句中不能出现聚合函数,having子句可以出现聚合函数。
                使用where子句的地方通常可以使用having子句进行替代。

                ~对订单表中商品归类后,显示每一类商品的总价
                        select product,sum(price) from orders group by product;
                ~查询商品总价大于100的商品
                        select product,sum(price) from orders group by product having sum(price)>100;
                ~查询单价小于100 总价大于150的商品的名称
                        select product from orders where price<100 group by product having sum(price)>150;
SQL语句的书写顺序:select from where groupby having orderby

SQL语句的执行顺序:from where select group by having order by
   

       

3 个回复

倒序浏览
我居然可以看懂{:soso_e102:}
回复 使用道具 举报
还说没写...
回复 使用道具 举报
学习了,有时候写代码还是会与数据库有一点点关系的!谢谢分享!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马