MySQL数据库常用语法大全

来源:互联网 发布:关于程序员的搞笑图片 编辑:程序博客网 时间:2024/06/06 02:25

1、数据库(CURD -- 增删改查):

* 创建数据库

                    * 语法:create database 数据名称;        创建一个数据了。    
                    *         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';
                        
                * 查看数据库    show databases;        
                * 查询数据库的定义    show create database 数据库;
                    show create database mydb2;
                    
                * 删除数据库    drop database 数据库名称;
                
                练习:
                    查看当前数据库服务器中的所有数据库
                        show databases;
                    查看前面创建的mydb2数据库的定义信息
                        show create database mydb2;
                    删除前面创建的mydb1数据库
                        drop database mydb1;
                
                * 修改数据库
                    * 语法:alter database 数据库 character set 编码 collate 校对规则;
                    
                    * 练习:查看服务器中的数据库,并把其中某一个库的字符集修改为gbk
                        alter database mydb2 character set 'gbk';
                    
                * 其他的操作
                    * 切换数据库(*****) use db_name;
                    * 查看当前使用的数据库 select database();
                    
                    
 * 表(table)(CURD -- 增删改查)
                * 语法:
                    create table 表名(
                        字段1 类型(长度) 约束,
                        字段2 类型(长度) 约束,
                        字段3 类型(长度) 约束,
                        字段4 类型(长度) 约束
                    );
                    
                    注意:
                        * 表名小括号,后面要有分号。
                        * 每一行字段后面要有逗号,但是最后一行没有逗号。
                        * 数据的类型后面有长度,如果是字符串类型,长度必须加。如果其他类型可以不加。默认长度。int 默认长度11
                        
                    编程语言的对象属性与数据库中数据的对应关系:   
                    public class User{
                        int id;
                        String name;
                        String pass;
                        String eamil;
                        String nikename;
                    }
                    
                * 数据的类型
                    字符串型
                    VARCHAR、CHAR
                        * varchar和char区别:
                            * varchar(经常使用) 长度是可变的。 name varchar(8) 存入数据hello,但是如果存入helloworld报错了。
                            * char                长度不可变的。   name char(8) 存入的数据hello,如果不够用空格补全。
                            * 效率高:char较高。
                            
                    大数据类型(一般不用)
                    BLOB、TEXT
                        BLOB:二进制文件
                        TEXT:字符
                        
                    数值型
                    TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
                    
                    逻辑性 对应boolean
                    BIT
                    
                    日期型
                    DATE、TIME、DATETIME、TIMESTAMP
                        * date    只包含日期
                        * time    只包含时分秒
                        * datetime和timestamp包含日期和时分秒区别:
                            * datetime需要手动录入时间。
                            * timestamp不传入数据,默认选择当前系统时间。
                        
                * 练习,创建表的练习
                    create table employee(
                        id int,
                        name varchar(20),
                        gender varchar(10),
                        birthday date,
                        entry_date date,
                        job varchar(100),
                        salary double,
                        resume text
                    );
                    
                
            * 约束(单表)
                * 主键约束(*****)
                    * 标识标记该条记录。    通过pramary 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(100) not null,
                    salary double not null,
                    resume text not null
                );
                
            * 使用desc 表名; 查看表的信息    
            * show tables ; 查看当前库内所有表名
            * show create table 表名; 查看建表语句和字符集
                
            * 删除表
                drop table employee2;
                
            * 修改表
                alter table 表名 add 字段 类型(长度) 约束;                     -- 添加字段
                alter table 表名 drop 字段;                                    -- 删除字段
                alter table 表名 modify 字段 类型(长度) 约束;                -- 修改类型或者约束
                alter table 表名 change 旧字段 新字段 类型(长度) 约束        -- 修改字段的名称    
                
                rename table 表名 to 新表名;                                -- 修改表名
                alter table 表名 character set utf8;                        -- 修改字符集
                
            * 练习:
                在上面员工表的基本上增加一个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);
                    
                
        * 数据(CURD -- 增删改查)(******)
            
            * 添加数据
            * insert into 表名 (字段1,字段2,字段3..) values(值1,值2,值3...);    有几列就插入多少的值。
            * insert into 表名 values(值1,值2,值3...);                            插入所有的列
            
            * 注意:
                * 数据与字段的类型相同。
                * 字段长度需要控制。
                * 字符串或者日期类型需要使用''    
                
            * 向user表中插入数据
                insert into user values (1,'xiaofeng','1994-10-10','2011-1-1','HR',19000,'aaa','abc');
                insert into user values (2,'美美','1994-10-10','2011-1-1','HR',19000,'aaa','abc');
                insert into user values (3,'小风','1994-10-10','2011-1-1','WORKER',21000,'aaa','abc');
                insert into user values (4,'芙蓉','1994-10-10','2011-1-1','HR',1000,'aaa','abc');
                insert into user values (5,'班长','1994-10-10','2011-1-1','HR',100,'aaa','abc');
                
            * 解决中文乱码的问题(*****)
                [client]
                port=3306
                [mysql]
                default-character-set=gbk
            * 修改完需要重新启动服务。    
            
            
        * 修改语句
            * 语法:    update 表名 set 字段=值,字段=值... [where ]        
                * 如果没有where条件,默认更新所有的记录。
                * 有where提交,选择某一条记录。
                
            将所有员工薪水修改为5000元。
                update user set salary=5000;
                
            将姓名为’班长’的员工薪水修改为3000元。
                update user set salary=3000 where username='班长';
                
            将姓名为’美美’的员工薪水修改为4000元,job改为BOSS。
                update user set salary=4000,job='BOSS' where username='美美';
                
            将班长的薪水在原有基础上增加1000元。    
                update user set salary = salary+1000 where username='班长';
                
        * 删除数据    delete
            语法:delete from 表名 [where ];    删除数据
            truncate 表名; 删除所有的数据
                
            * truncate 和 delete的区别:
                * truncate删除数据,先删除整个表。再创建一个新的空的表。(效率)
                * delete删除数据,一条一条删除的。(*****)
                    
                * 事物(insert update delete)
                    
            删除表中名称为’班长’的记录。
                * delete from user where username='班长';
            删除表中所有记录。
                * delete from user;
            使用truncate删除表中记录。
                * truncate user;
                    
                    
        * 查询语句            
            * 语法:    select * from 表名;                                查询所有(字段)
                        select 字段名1,字段名2,字段名3 from 表名;        显示查询字段名
                        select DISTINCT 字段名 from 表名;                去除重复的数据。        
                        
                        
            查询表中所有学生的信息。
                select * from stu;
            查询表中所有学生的姓名和对应的英语成绩。
                select name,english from stu;
            过滤表中重复数据。(面试题)
                select distinct english from stu;
    
                
            * 查询的列可以运算
            * 可以使用别名:使用as 别名        并且as可以省略。
                
                练习:
                    在所有学生分数上加10分特长分。
                        select name,math+10,english+10,chinese+10 from stu;
                    统计每个学生的总分。
                        select name,math+english+chinese from stu;
                        
                    使用别名表示学生分数。
                    select name,(math+english+chinese) as sum from stu;
                    
                    
            * 使用where条件过滤    
                查询姓名为班长的学生成绩
                    select * from stu where name='班长';
                    
                查询英语成绩大于90分的同学
                    select name,english from stu where english < 15;
                    
                查询总分大于200分的所有同学
                    select name,math+english+chinese from stu where (math+english+chinese) > 200;
                    
            * 常用的符号
                >   <   <=   >=   =    <>(不等于)
                in(范围内取内容)
                like        -- 模糊查询        写法:like '张_或者%';    _和%区别:占位符。_只一个%可以有多个
                                                    %的写法    like '%张';        结果XXX张
                                                            like '张%';        结果张XXX
                                                            like '%张%';    只要有张就行
                is null        -- 判断是否为null
                and            -- 并且
                or            -- 或者
                not            -- 不成立
                
                
                * 练习
                    查询英语分数在 80-90之间的同学。
                        select * from stu where english >80 and english <90;
                        select * from stu where english between 80 and 90;
                        
                    查询数学分数为18,78,46的同学。(in)
                        select * from stu where math in(18,78,46);
                        
                    查询所有姓班的学生成绩。
                        select * from stu where name like '班%';
                    查询数学分>80,语文分>80的同学。
                        select * from stu where math >80 or chinese > 80;
            
            * 排序    使用order by 升序默认的(asc)/降序(desc)
                * 出现select的语句末尾。
                
                
                练习
                    对数学成绩排序后输出。
                        select name,math from stu order by math;
                    对总分排序按从高到低的顺序输出
                        select name,math+english+chinese from stu order by (math+english+chinese) desc;
                    对学生成绩按照英语进行降序排序,英语相同学员按照数学降序
                        select * from stu order by english desc,math desc;
                        
                    对姓美的学生成绩排序输出
                        select * from stu where name like '美%' order by english desc;
                
                    
            * 聚集函数    
                * count        获取数量
                    练习:
                    统计一个班级共有多少学生?
                        select count(*) from stu;
                    统计数学成绩大于90的学生有多少个?
                        select count(*) from stu where math > 90;
                    统计总分大于150的人数有多少?
                        select count(*) from stu where (math+english+chinese) > 150;
                    
                * sum        求和(忽略null值)        可以同ifnull(xxx,0)
                    统计一个班级数学总成绩?
                        select sum(math) from stu;
                    统计一个班级语文、英语、数学各科的总成绩
                        select sum(math),sum(english),sum(chinese) from stu;
                    统计一个班级语文、英语、数学的成绩总和
                        select sum(ifnull(math,0)+english+chinese) from stu;
                        select sum(math)+sum(english)+sum(chinese) from stu;
                        
                    统计一个班级语文成绩平均分
                        select sum(chinese) / count(*) from stu;
                    
                * avg        平均数
                    练习:
                    求一个班级数学平均分?
                        select avg(math) from stu;
                    求一个班级总分平均分
                        select avg(ifnull(math,0)+english+chinese) from stu;
                        
                * max        最大值
                    select max(math) from stu;
                * min        最小值
                    select min(math) from stu;
                    
                    
                * group by    分组(一起使用)    条件过滤需要是having,不能使用where
                    练习:对订单表中商品归类后,显示每一类商品的总价.
                        select product,count(*),sum(price) from orders group by product;
                        
                    练习:查询购买了几类商品,并且每类总价大于100的商品    
                        select product,sum(price) from orders group by product having sum(price) > 100;
                    
                    

        * 小结 select 语句 : S-F-W-G-H-O 组合 select ... from ... where ... group by... having... order by ... ; 顺序不能改变



0 0
原创粉丝点击