美文网首页
SQL基本操作

SQL基本操作

作者: jose_dl | 来源:发表于2017-07-13 20:55 被阅读0次
    乱码

    cmd窗口汉字显示乱码,一般
    set names gbk就好用了

    数据类型

    varchar(size)可变大小的字符串
    date格式yyyy-mm-dd
    time格式08:22:10
    datetime就是date+time

    数据库相关操作
    • 创建数据库 并指定数据库中数据的编码
    create databse mybase character set utf8;
    
    • 查看数据库
    show database;
    
    • 创建数据库
    create databse mybase;
    
    • 查看数据库创建信息
    show cretate database mybase;
    
    • 删除数据库
    drop database mybase;
    
    • 使用某个数据库
    use databse;
    
    • 查看正在使用哪个数据库
    use database;
    
    表结构相关操作
    • 创建表
    create table student(
        id int primary key,
        name varchar(20)
    );
    
    • 添加一个主键
    alter table student add primary key(id); 
    
    • 删除主键
    alter table sort drop primary key;
    
    • 查看表
    show tables;
    
    • 查看表结构
    desc student;
    
    • 删除表
    drop table student;
    
    • 修改列数据类型
    alter table student modify chinese int;
    
    • 修改原列名到新名
    alter table student change name newname varchar(20);
    
    • 删除某列
    alter table student drop name;
    
    • 修改表名字
    rename table oldname to newname;
    
    • 修改表的字符集
    alter table student character set gbk;
    
    插入表记录

    除了数值类型外,其它的字段类型的值必须使用引号引起。
    如果要插入空值,可以不写字段,或者插入 null。
    对于自动增长的列在操作时,直接插入null值即可

    insert into 表 (列名1,列名2,列名3..) values  (值1,值2,值3..); -- 向表中插入某些列
    insert into 表 values (值1,值2,值3..); --向表中插入所有列
    
    更新表记录
    update 表名 set 字段名=值,字段名=值;
    update 表名 set 字段名=值,字段名=值 where 条件;
    
    删除表中数据
    delete from 表名 [where 条件];
    
    查询别名显示as

    这里的别名,并没有修改数据库中的保存列名,只是显示不同了。类似于一份拷贝

    select Sname as '姓名' from S;
    select Sname as '姓名' from S where '姓名'='AAA';//这就是错的
    
    select name math+chinese as sum where sum >200;//这个就是对的
    
    条件查询
    image.png
    一些例子
    • 添加2列信息,出生日期,籍贯。
    alter table student add birthday date,add nationality varchar(20);
    
    • 将语文成绩修改为默认值为0
    alter table student alter column chinese drop default;
    alter table student alter column chinese set default 0;
    
    • 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列
    select * from S order by depaNum,Age desc;
    
    练习一
    create table student(
        id int,
        name varchar(20),
        chinese float,
        english float,
        math float
    );
    在命令行中,name 列最好能插入中文值
    1,请添加一个主键。
    alter table student add primary key(id);  
    2. 请添加2列信息,出生日期,籍贯。
    alter table student add birthday date,add nationality varchar(20);
    3,请修改语文成绩的数据类型为int型.
    alter table student modify chinese int;
    4. 请将各科成绩修改为默认值为0
    alter table student alter column chinese drop default;
    alter table student alter column chinese set default 0;
    
    alter table student alter column english drop default;
    alter table student alter column english set default 0;
    
    alter table student alter column math drop default;
    alter table student alter column math set default 0;
    5. 请在里面插入10名学生数据。(成绩可以随便插入,不过最好有一个不同的分布)
    insert into student values (1,'王一',90,80,70,'1992-02-12','北京');
    insert into student values (2,'田一',91,80,70,'1992-02-12','上海');
    insert into student values (3,'李三',92,80,70,'1992-02-12','山东');
    insert into student values (4,'李二',40,89,92,'1992-02-12','湖北');
    insert into student values (5,'李一',20,83,70,'1992-02-12','北京');
    insert into student values (6,'赵三',70,80,70,'1992-02-12','北京');
    insert into student values (7,'赵二',30,80,80,'1992-02-12','广东');
    insert into student values (8,'赵一',90,80,40,'1992-02-12','北京');
    insert into student values (9,'王三',99,80,92,'1992-02-12','北京');
    insert into student values (10,'王二',90,81,70,'1992-02-12','北京');
    
    6. 请分别找出单科成绩最高的学生名单。(降序即可)
    select name from student order by chinese desc;
    select name from student order by math desc;
    select name from student order by english desc;
    7. 请找出总成绩最高的学生。(降序即可)
    select name from student order by chinese+math+english desc;
    10.假设10名同学中有同姓的,如王,请找出姓王同学的信息.
    select * from student where name like '王%';
    12.请找出有任何一科不及格学生的名称
    select * from student where chinese <60 or math<60 or english <60;
    13.请找出两科成绩在90分以上的学生名称。
    select * from student where chinese >90 and math>90 or english >90 and math>90 or chinese>90 and english>90;
    14.请找出没有一科挂科的学生名称。
    select name from student where math>60 and english >60 and chinese >60;
    15.请找出所有非北上广省份的学生.
    select * from student where nationality not in('北京','上海','广东');
    
    练习二
    新建一个学生表S,有包含如下信息
    学号 Sno,
    学生姓名 Sname,
    性别 Sex,
    年龄 Age,
    专业 Depa
    
    。
    (请设置主键约束)
    并插入10条数据。
    
    专业包含(信息系、数学系,计算机科学系 等)
    学号格式为 200501 200502 ... 200510
    
    create table S(
    Sno int primary key,
    Sname varchar(10), 
    Sex   char(5),
    Age  smallint,
    Depa varchar(10),
    Birthday date,
    depaNum int
    );
    
    insert into S values(200501,'侯希白','男',20,'信息系','1990-01-02',1);
    insert into S values(200502,'坦坦翁','男',90,'数学系','1890-02-02',3);
    insert into S values(200503,'纳兰右慈','男',40,'计算机科学系','1990-05-02',2);
    insert into S values(200504,'元本溪','男',50,'经管系','1970-11-22',6);
    insert into S values(200505,'棋待诏','男',35,'电子科学','1990-7-05',4);
    insert into S values(200506,'贾嘉佳','女',18,'体育系','1390-01-02',5);
    insert into S values(200507,'李当心','男',43,'佛学系','1590-01-02',7);
    insert into S values(200508,'叶白夔','男',20,'军工系','1930-01-02',8);
    insert into S values(200509,'陈芝报','男',28,'信息系','1995-01-02',1);
    insert into S values(2005010,'轩辕青峰','女',25,'会计系','1992-03-15',9);
    然后做如下查询:
    
    
    1.         查询全体学生的学号与姓名。
        select Sno,Sname from S;
    
    2.         查询全体学生的姓名、学号、所在系。
        select Sno,Sname,Depa from S;
    
    3.         查询全体学生的详细记录。
        select * from S;
    4.         查全体学生的姓名及其出生年份。
        select Sname,Birthday from S;
    5.         查询全体学生的姓名、出生年份和所有系 使用列别名改变查询结果的列标题
        select Sname as '姓名',Birthday as '出生年份',Depa  as '所在系' from S;
    7.         查询所有年龄在20岁以下的学生姓名及其年龄。
        select Sname,Age from S where Age < 20;
    8.         查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。
        select Sname,Depa,Age from S between 20 and 23;
    9.         查询年龄不在20~23岁之间的学生姓名、系别和年龄。
        select Sname,Depa,Age from S where Age not  between 20 and 23;
    10.     查询信息系、数学系和计算机系学生的姓名和性别。
        select Sname,Sex from S where Depa in('信息系','数学系','计算机科学系');
    11.     查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。
        select Sname,Sex from S where Depa not in('信息系','数学系','计算机科学系');
    12.     查询学号为200501的学生的详细情况。
        select * from S where Sno = 200501;
    13.     查询所有姓刘学生的姓名、学号和性别。
        select Sname,Sno,Sex from S where Sname like '刘%';
    14.     查询姓“李”且全名为3个汉字的学生的姓名。
        select Sname from S where Sname like '李__';
    15.     查询名字中第2个字为“本"字的学生的姓名和学号。
        select Sname,Sno from S where Sname like '_本_';
    16.     查询所有不姓刘的学生姓名。
        select Sname from S where Sname not like '刘%';
    17.     查询学号在200501~200509之间的学生姓名。
        select Sname from S where Sno between 200501 and 200509;
    20.     查询计算机系年龄在20岁以下的学生姓名。
        select Sname from S where Depa='计算机科学系' and Age<20;
    22.     查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
        select * from S order by depaNum,Age desc;
    

    相关文章

      网友评论

          本文标题:SQL基本操作

          本文链接:https://www.haomeiwen.com/subject/qgeghxtx.html