数据库基础查询


    第一步,选中数据库
        use 库名称、或者单选库(选中后会加粗表示)
    第二部数据库基础查询,选择列
        select *(全部)/某一列名称 from 表名 (前面是展示,后面是可附带操作)
        (直接输入select 1,2.......会打印出一个单行列名称为1,2......内容也为1,2.....的表)
            1.where 列属性判断(打印符合条件的,例如打印number=1的所有元素)
            2.order by 列1名称(打印选择的列并且以列1排序)
        ps:1.执行中使用快捷键会自动从上一个‘;’后开始执行,到下一个‘;’结束
            2.在SQLyog中注释是##,依旧遵顼1原则
    

  第三步,查询;内部查询

 第三步,查询
        一.select 某一列名称 from 表名 
            1.可以选多个列用‘,’隔开(如:select Phone,names form 表名;
            2.列可以进行算术运算(如:select Phone,Phone -1000,Phone-20000 AS ‘new Phone’ form 表名;
                                例中:最终会打印三列,1.Phone列 ,2.Phone列(数值全部-1000),3.new Phone列(数值全部-20000,定义名称时空格需要用引号隔开,单双不论)
                                修改表数据也可以直接在表数据中双击修改,然后保存
            3.使用distinct可以隐藏重复数据
        二.where判断
            1.select 某一列名称 from 表名 where 判断条件
                例如:SELECT * FROM students WHERE StudentSex=‘男’;(字符串不分大小写)
                运算符的使用:
                >,<,=,<=,>=,!=(<>都是不等于)(日期比较格式:datatime>‘1999-10-28’;这是默认的表达形式)
                AND,OR的使用:
                多判断运算符:AND的优先级高于OR:例如:例如:SELECT * FROM students WHERE StudentSex=‘男’ OR datatime>‘1999-10-28’ AND Phone=1000;会优先算AND
                in的使用:
                SELECT * FROM students WHERE StudentName='郭靖' OR StudentName='李梅';会输出郭靖和李梅的内容
                SELECT * FROM students WHERE StudentName='郭靖' OR '李梅';只会输出郭靖的内容,因为or输出Boolean判断
                SELECT * FROM students WHERE StudentName (not) in('郭靖' ,'李梅');会输出郭靖和李梅的内容
                betwween的使用:
                SELECT * FROM students WHERE StudentID between 1000 and 2000;
                like的使用:
                例如:SELECT * FROM students WHERE StudentEmail LIKE 'g%';不区分大小写(即表示以g开头的内容,g后任意长度
                    其他组合:%g:以g结尾、
                              %g%:包含g、
                              _g:两个字符第二个字符为g、
                              g%:以g开头
                regexp的使用
                例如:SELECT * FROM students WHERE StudentEmail REGEXP 'g[uo]';(表示包含g并且之后是u或者o的内容
                    其他组合:^g:以g开头、
                              g$:以g结尾、
                              g :包含g、
                              g|e:包含g或e、
                              [abcd]g:包含g并且前面是abcd中其中一个、
                              [a-d]g:和上面一样
                is (not) null的使用
                例如:SELECT * FROM students WHERE StudentEmail IS NOT NULL;
                order by的使用:
                例如:SELECT * FROM students ORDER BY Phone DESC;(DESC表示降序)
                2.SELECT * FROM students ORDER BY Phone DESC, StudentSex;(优先以Phone降序,同Phone里按StudentSex升序)
                3.SELECT *,10 AS newOne FROM students ORDER BY 3, newOne;(优先以select选择的第三列降序,同级别按StudentSex升序);
                limit的使用:
                例如:SELECT * FROM students LIMIT 1,10;(第一个数1,为偏移量:即跳过第一个内容(0可以省略),第二个10为打印量:即输出10条内容(如果没有10条,有多少打印多少))
        三.多表联动:
                内连接和外连接
                1.内连接:INNER(可以省略,默认不写) JOIN的用法:
                    SELECT s.Phone,s.StudentName FROM students s JOIN subject1 j ON s.StudentSex = j.`SubjectNo`;
                    (打印students表中的Phone和StudentName列中符合StudentSex内容与subject1表`SubjectNo`内容相同的;
                    (students s代表一种缩写,用s代替students
                    例如:
                        SELECT s.Phone,s.StudentName FROM students s JOIN mysql.subject1 j ON s.StudentSex = j.`SubjectNo`;
                    (打印students表中的Phone和StudentName列中符合StudentSex内容与mysql库subject1表`SubjectNo`内容相同的;
                    3.自连接
                    SELECT * FROM students s JOIN students t ;(交叉连接,案例中共三个学生,输出9个
                    SELECT t.teachers_ID,t.teacher_name,l.teachers_name AS leader FROM teachers l JOIN teachers t ON t.teacher_leader = l.teachers_ID;
                        (输出同一张表中老师姓名和领导姓名(领导姓名通过领导编号在表中查询)
                    四.多表连接
                        ps:多表连接尽量不要超过三张,所有的表连接都会一定程度上影响查询速度
                    SELECT s.Phone,s.StudentName,sex.char,
                        FROM students s 
                    JOIN subject1 j 
                        ON s.StudentSex = j.`SubjectNo`
                    JOIN sex
                        ON s.StudentSex = sexNumber;
                    五.符合连接条件
                    基于复合主键判断
                    SELECT s.Phone,s.StudentName,sex.char,
                        FROM students s 
                    JOIN subject1 j 
                        ON s.StudentSex = j.`SubjectNo`
                        AND s.StudentID =j.Grade;
                    六.隐式连接
                    不推荐,因为如果忘记where就会交叉连接
                    SELECT * FROM students s JOIN teathers t ON s.teacher = t.teachers_ID;
                    SELECT * FROM students s, teachers t WHERE s.teacher = t.teachers_ID;(这就是隐式连接
                

  2.外连接OUTER(可省略) JOIN

 2.外连接OUTER(可省略) JOIN
                    1.左连接(尽量使用),右连接,join两张表,join是交集,左连接是左边加交集(from后,右连接是右边加交集(join后)
                    例如:SELECT * FROM students s LEFT/RIGHT JOIN teathers t ON s.teacher = t.teachers_ID;
                    2.多表外连接
                        SELECT s.Phone,s.StudentName,sex.char,
                        FROM students s 
                    LEFT JOIN subject1 j 
                        ON s.StudentSex = j.`SubjectNo`
                    LEFT JOIN sex
                        ON s.StudentSex = sexNumber;
                    3.自外连接
                        SELECT t.teachers_ID,t.teacher_name,l.teachers_name AS leader FROM teachers l LEFT JOIN teachers t ON t.teacher_leader = l.teachers_ID;
                
            4.USING使用:
                多表联动时,条件判断如果列名称相同,可以使用
                SELECT s.Phone,s.StudentName,sex.char,
                        FROM students s 
                    JOIN subject1 j 
                        ON s.StudentSex = j.StudentSex       =  USING(StudentSex)   如果是复合主键,只需要在列名称间加‘,’USING(StudentSex,names)
            5.自然连接:
                让库自己判断列名称相同的进行连接,结果不容易掌控
                例如:SELECT t.teachers_ID,t.teacher_name FROM teachers l  JOIN teachers t ;
            6.交叉连接,
                返回左边的每一条内容和右边表的所有内容的排序
                例如:SELECT t.teachers_ID,t.teacher_name FROM teachers l  teachers t ;
    四:联合
        UNION联合多个查询结果
            例如:SELECT *,'主任' AS job FROM teachers t  WHERE t>=10
                UNION
                SELECT *,'教师' AS job FROM teachers t  WHERE t<10
            多表联合:(注:需要列数相同,否则会报错,并且第一个查询的列名称会被保留;例中输出为names
                例如:SELECT names FROM teachers t
                        UNION
                    SELECT newname FROM teacher1 t1  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值