sql_快速入门

 

SQL 学习笔记快速回顾:

第一部分:入门基础

   修改sql中文乱码问题:

  第一语句设置:show variables;
   执行:set character_set_client=gb2312;
   执行:set character_set_results=gb2312;(关掉客户端就会恢复默认设置)
         
         第二解决方案是改变sql配置文件来实现,但是一定要记得改回默认;(不建议使用)
   找到安装目录下的my.ini文件,在文件下的 CLIENT SECTION下的

   default-character-set=utf8改为你想要的编码就可以了;

1:明确库与表的关系
    一般是一个应用创建一个库,一个库包括多个表;
2:创建数据库的语法: CREATE DATABASE [IF NOT EXSTS] db_name CHARASTER SET ***
                    CHARACTER SET:指定数据库采用的字符集
3:显示库的信息
     SHOW DATABASES;
4:显示数据库创建信息
     SHOW CREATE DATABASE 库名;
5:数据库删除语句:
     DROP DATABASE 库名;
6:修改数据库,不能修改库名;
   修改语法:alter database db_name;
7:数据备份的语法:MYSQLDUMP -u用户名 —p密码 数据库名>位置\名字.jsp;
8:数据恢复语法有三种:
  1:如果你是删除了库的,那么你就的想到恢复到那个库中,以及
    围绕这个思想,如果删除库,那么你就创建库:CREATE DATABASE DB_NAME;
    然后再恢复
    SOURS 文件名.sql
    windows命令:mysql -u用户名 -p密码 数据地点;
    改动脚本文件,及备份的文件,即加入mysql -uroot -proot <c:\1.sql语句即可;
9:创建表语法:注意事项,一定要在创建表之前使用 ————————use 库;
 CREATE TABLE table_name(
  字段 类型   表的约束,
  字段 类型   表的约束
 );
10:关于数据类型;到时候查文档;
11:修改表;
  ALTER TABLE table_name   语句;
   ADD 追加
   MODIFY  修改
   DORP    删除
  修改表的名字: RENAME TABLE 表名 TO 新表名;
  修改字符集:   ALTER TABLE  表名 character set 字符集;
练习:1:创建一个员工信息表
 CREATE TABLE employee(
  id int,
  name varchar(20),
  gender varchar(20),
  birthday date,
  entry_date date,
  job varchar(40),
  salary decimal(8,2),
  resume text 
 );

   2:在上面员工表的基本上增加一个image列
 ALTER TABLE employee add image varchar(20);
   3:再填充点内容;
        insert  into employee(id,name,job) values (1,"wode","nini") ;
   4:修改job列,使其长度为60。(DESC 表名)作用是显示查看表的列;显示创建细节 SHOW CREATER TABLE 表名;
        ALTER TABLE   MODIFY JOB VARCHAR(60);
   5:删除gender列。
        ALTER TABLE EMPLOYEE DROP gender;
   6:修改表的字符集为utf-8
 ALTER TABLE EMPLOYEE CHARATER SET UTF8;
   7:列名name修改为username
       ALTER TABLE EMPLOYEE TO USERNAME;
-------------查看表中数据:select * from 表名;


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

   UPDATE语句-----------------更新语句;
 语法:UPDATE TABLE_NAME
   SET
   WHERE

   UPDATE语法可以用新值更新原有表行中的各列。
   SET子句指示要修改哪些列和要给予哪些值。
   WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。

   使用 update语句修改表中数据;

    实现例子:在employee表中修改表中的纪录;
        1:将所有员工薪水修改为5000元。
     UPDATE EMPLOYEE
          SET  salary=5000;
               2:将姓名为’HJJ’的员工薪水修改为3000元。
            UPDATE EMPLOYEE
         SET salary=3000
         WHERE NAME='HJJ';
               3:将姓名为’aaa’的员工薪水修改为4000元,job改为ccc。
     UPDATE EMPLOYEE
         SET salary=4000 ,job='ccc'
         WHERE NAME='HJJ';
        4:将hjj的薪水在原有基础上增加1000元。
             UPDATE EMPLOYEE
          SET salary=salary+1000
          WHERE NAME='HJJ';

   DELETE语句-----------------删除数据;
   语法:DELETE FROM TABLE_NAME
     WHERE ,,,
      如果不使用where子句,将删除表中所有数据。
      Delete语句不能删除某一列的值(可使用update)
      使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
      同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。
      删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同,参看mysql文档。

 


   SELECT语句-----------------查询数据;

   一:语法:普通查询 select [distinct]  *|{column1, column2. column3..}

     from table;

      Select 指定查询哪些列的数据。
      column指定列名。
      *号代表查询所有列。
      From指定查询哪张表。
      DISTINCT可选,指显示结果时,是否剔除重复数据
     例子:
      1:查询表中所有学生的信息。
          select *from 表名;
             2:查询表中所有学生的姓名和对应的英语成绩。
      
             3:过滤表中重复数据。
      采用distinct;
   二:语法:使用表达式进行运算;
     SELECT *{COLUMN1}
     FROM TABLE;
     使用AS语句取别名;SELECT COLUMN AS 别名 FROM 表名;
   
          三:语法:使用WHERE子句;
      >   <   <=   >=   =    <> 大于、小于、大于(小于)等于、不等于
      BETWEEN  ...AND... 显示在某一区间的值
         比较运算符 IN(set) 显示在in列表中的值,例:in(100,200)//或
      LIKE ‘张pattern’ 模糊查询
      IS NULL 判断是否为空

      and 多个条件同时成立
         逻辑运算符 or 多个条件任一成立
      not 不成立,例:where not(salary>100);
         Like语句中,% 代表零个或多个任意字符,
                     _ 代表一个字符,例first_name like ‘_a%’;
          四:语法:使用order by子句排序查询;
       ASC升序、DESC 降序;
       跟着from后面  (不是where后面哦!!没有where)
       SELECT COLUMN1,FROM ,,,
          ORDER BY COLUMN1;

       合计函数:Count(*);
       求和函数:Sum函数返回满足where条件的行的和
       求平均函数:AVG函数返回满足where条件的一列的平均值
       合计函数:Max/min函数返回满足where条件的一列的最大/最小值
   五:使用GROUP BY

   六:使用having 子句过滤

练习:

创建数据库:
   create table student(
    id int,
    name varchar(20),
    chinese float,
    english float,
    math float
   );

   insert into student(id,name,chinese,english,math) values(1,'张小明',89,78,90);
   insert into student(id,name,chinese,english,math) values(2,'李进',67,98,56);
   insert into student(id,name,chinese,english,math) values(3,'王五',87,78,77);
   insert into student(id,name,chinese,english,math) values(4,'李一',88,98,90);
   insert into student(id,name,chinese,english,math) values(5,'李来财',82,84,67);
   insert into student(id,name,chinese,english,math) values(6,'张进宝',55,85,45);
   insert into student(id,name,chinese,english,math) values(7,'黄蓉',75,65,30);

1:求一个班级数学平均分?
  SELECT AVG(MATH) AS 数学班级平均分 from student;
2:求一个班级总分平均分
  SELECT AVG(CHINESE+english+math) FROM STUDENT;
3:统计一个班级数学总成绩?
SELECT SUM(MATH)数学总成绩 from student;

4:统计一个班级共有多少学生?
SELECT count(*)from student;
5:查询总分大于200分的所有同学,并输出总分
SELECT *  ,(CHINESE+english+math) AS 总分  FROM STUDENT where  (CHINESE+english+math)>200 ;
6:查询英语分数在 80-90之间的同学。
select name,english from student where english  between 80 and 90;
select name ,english from student where english>80 and english<90;
7:查询数学分数为80,90,96的同学。
select name,math from student where math in(80,90,96);
8:对数学成绩排序后输出。
select name,math from student order by math desc;
9:求班级最高分和最低分由高到低
select  max(CHINESE+english+math) AS 最高分 from student;

第三部分:数据库表约束;这才是重点,记忆单词-------------------------------------


1;定义唯一约束  
 创建表,实现唯一约束,unique
 Create table people(
  id int primary key ,//主键约束
  name varchar(20) not null//不准许为空
 );
2:删除主键:alter table table_name drop primary key;
3:  auto_increment//删除的情况不阻止自动增长,,,--------------------------记住单词
4;定义外键约束:constraint ordersid_FK foreign key(ordersid) references orders(id),
   ordersid_FK:外键名称
   实例:创建丈夫和妻子的两个表;
   CREATE TABLE husband(
    id int primary key auto_increment,
    name varchar(20)
   );
   CREATE TABLE wife(
    id int primary key auto_increment,
    name varchar(20),
    husband_id int,
    constraint husband_FK foreign key(husband_id) references husband(id) on delete cascade
   );


set  null的时候不能干掉表,可以删除元素

 


-----------------------------------------一对一--------------------------------------------
create table person
(
 id int primary key,
 name varchar(40)
);

create table idcard
(
 id int primary key,
 address varchar(40),
 constraint id_FK foreign key(id) references person(id)
);

-----------------------------------------自关联---------------------------------------------
create table person1
(
 id int primary key,
 name varchar(40),
 parent_id int,
 constraint id_FK1 foreign key(id) references person1(id)
);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值